Python正则匹配
正则表达式(regular expression)是一种强大的字符串处理工具,它可以让我们用一种更高效的方式来处理字符串。在Python中,我们可以使用re模块来进行正则表达式的匹配。
re模块的基本用法
Python提供了re模块来支持正则表达式的操作。re模块中最常用的函数有:
- re.match:从字符串的开头开始匹配,如果匹配成功则返回一个匹配对象,否则返回None。
- re.search:在字符串中搜索匹配项,找到第一个匹配项后返回一个匹配对象,否则返回None。
- re.findall:找到所有匹配项,并以列表的形式返回所有匹配项。
- re.sub:替换字符串中的特定匹配项。
下面我们通过一些示例来演示正则表达式的基本用法:
import re
# 使用re.match
result = re.match(r'hello', 'hello world')
print(result.group()) # 输出结果为hello
# 使用re.search
result = re.search(r'world', 'hello world')
print(result.group()) # 输出结果为world
# 使用re.findall
result = re.findall(r'\d+', 'hello 123 world 456')
print(result) # 输出结果为['123', '456']
# 使用re.sub
result = re.sub(r'\d+', '666', 'hello 123 world 456')
print(result) # 输出结果为hello 666 world 666
正则表达式的语法
正则表达式的语法是一个较为庞大的话题,这里我们只介绍一些最基本的语法规则:
\d
:匹配数字。\w
:匹配字母、数字或下划线。\s
:匹配空白字符。.
:匹配任意字符。*
:匹配前面的字符0次或多次。+
:匹配前面的字符1次或多次。?
:匹配前面的字符0次或1次。{n}
:匹配前面的字符恰好n次。{n,}
:匹配前面的字符至少n次。{n,m}
:匹配前面的字符至少n次,但不超过m次。^
:匹配字符串的开头。$
:匹配字符串的结尾。
下面通过几个示例来演示正则表达式的语法:
import re
# 匹配手机号码
phone_numbers = ['13812345678', '18098765432', '13587654321', '1234567890']
for phone in phone_numbers:
if re.match(r'1[3456789]\d{9}', phone):
print(f'{phone} 是一个合法的手机号码')
else:
print(f'{phone} 不是一个合法的手机号码')
# 匹配邮箱地址
emails = ['test@example.com', '123@qq.com', 'hello@gmail.com', 'world']
for email in emails:
if re.match(r'\w+@\w+\.\w+', email):
print(f'{email} 是一个合法的邮箱地址')
else:
print(f'{email} 不是一个合法的邮箱地址')
贪婪匹配与非贪婪匹配
正则表达式中的*
和+
默认是贪婪匹配的,也就是说它们会尽可能多地匹配字符。例如,在字符串”123456″中,正则表达式\d+
会匹配整个字符串”123456″。
有时候我们并不想要贪婪匹配,而是希望匹配尽可能少的字符。这个时候可以在*
或+
后面加上?
来表示非贪婪匹配。例如,正则表达式\d+?
会匹配字符串”123456″中的”1″。
import re
# 贪婪匹配
text = '123456'
result = re.match(r'\d+', text)
print(result.group()) # 输出结果为123456
# 非贪婪匹配
result = re.match(r'\d+?', text)
print(result.group()) # 输出结果为1
总结
正则表达式是一种非常强大的字符串处理工具,可以帮助我们高效地处理字符串。在Python中,我们可以通过re模块来进行正则表达式的匹配,同时掌握一些基本的正则表达式语法规则和技巧可以让我们更加灵活地应对不同的匹配需求。