影响?在正则表达式字符串中

Syl*_*ain 4 python regex

请考虑以下Python代码:

>>> re.search(r'.*(99)', 'aa99bb').groups()
('99',)
>>> re.search(r'.*(99)?', 'aa99bb').groups()
(None,)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我在第二个例子中没有抓到99.

Tim*_*ker 11

这是因为第.*一个匹配整个字符串.此时,它不可能再匹配99,并且由于该组是可选的,因此正则表达式引擎停止,因为它已找到成功匹配.

另一方面,如果该组是强制性的,则正则表达式引擎必须回溯到该组.*.

比较来自RegexBuddy的以下调试会话(匹配的字符串部分.*以黄色突出显示,部分匹配为(99)蓝色):

.*(99):

在此输入图像描述


.*(99)?:

在此输入图像描述