3.贪婪模式与非贪婪模式

正常情况下,我们的正则匹配会找到尽量多的字符,如果在指令后面加上 ? 则可以关闭这种"贪婪"的行为。

贪婪模式(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'>

你可能感兴趣的:(3.贪婪模式与非贪婪模式)