正常情况下,我们的正则匹配会找到尽量多的字符,如果在指令后面加上 ? 则可以关闭这种"贪婪"的行为。
贪婪模式(consume)
# ab+会匹配a开头后面有1个或多个b的字符
# 正常情况下它会尽可能多地去匹配,这这里它把所有的b都匹配出来
import re
# 文本
text = 'abbbbb'
# 匹配规则
pattern = 'ab+'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['abbbbb']
<_sre.SRE_Match object; span=(0, 6), match='abbbbb'>
非贪婪模式
# 加上?之后,关闭了"贪婪"模式
# 表达式会尽量少的去匹配,这里只匹配a后面的1个b
import re
# 文本
text = 'abbbbb'
# 匹配规则
pattern = 'ab+?'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['ab']
<_sre.SRE_Match object; span=(0, 2), match='ab'>