Python 中正则表达式 {m,n} 的异常行为

问题描述 投票:0回答:1

为什么 python 中的 {m,n} 在一个正则表达式中显示非贪婪行为,而在其他正则表达式中显示贪婪行为?

import re

string = "aaaaaaaab"

match1 = re.search(r'a{5,7}?', string)
print(match1.group())

match2 = re.search(r'a{5,7}?b', string)
print(match2.group())

输出

aaaaa
aaaaaaab

为什么第二个输出是 7 个 a(贪婪),而不是第一个输出是 5 个 a(非贪婪)?

python-3.x regex repeat regex-greedy non-greedy
1个回答
0
投票

正则表达式搜索将返回模式与输入匹配的最低位置。

您的第一个模式匹配位置 0、1、2 和 3;第一个是 0,在位置 0 可以匹配 5、6 或 7 个

a
字符,但非贪婪量词更愿意只匹配 5 个。

第二个模式匹配位置 1、2 和 3;在最低位置 1,它必须 匹配 7 个

a
字符和一个
b
字符才能满足模式。不可能在位置 1 处匹配少于 7 个字符,因为无法到达
b
。位置 3 也匹配(且
a
字符较少)这一事实是无关紧要的;由于唯一的选择是匹配 5 个
a
字符,因此贪婪和非贪婪量化都会得到相同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.