以下代码首先需执行:
import re
示例1
匹配出数字后面的0:
>>> re.fullmatch('(\d+)(0*)', '102300').groups()
('102300', '')
由于\d+采用贪婪匹配,直接把后面的0全部匹配了,0*就只能匹配空字符串了。
加个?就让\d+采用非贪婪匹配,把后面的0匹配出来:
>>> re.fullmatch('(\d+?)(0*)', '102300').groups()
('1023', '00')
示例2
比如有一批需要提取出用户名的邮件地址:
addrs = ['<Tom Paris> tom@voyager.org', 'tom@voyager.org', 'bill.gates@microsoft.com']
我们希望提取出其中的用户名: Tom Paris 、 tom 和 bill.gates 。
假如采用默认的贪婪模式,为了匹配开头的<之类的字符,则必须使用非单词字符\W:
for addr in addrs:
print(re.match('\W*([\w\s\.]+)', addr).group(1))
但采用非贪婪匹配,开头我们就可以直接使用任意字符 . :
for addr in addrs: print(re.match('.*?([\w\s\.]+)', addr).group(1))
返回的结果都是:
Tom Paris tom bill.gates