给出以下 python 脚本:
text = '<?xml version="1.24" encoding="utf-8">'
mu = (".??[?]?[?]", "....")
for item in mu:
print item,":",re.search(item, text).group()
有人可以解释一下为什么第一次使用正则表达式 .??[?]?[?]
吗?返回 <?
而不仅仅是 ?
.
我的解释:
-
.??
应该不匹配.?
可以匹配或不匹配任何字符,第二个?
让它不贪心。 -
[?]?
可以匹配?
或不,所以没有什么是好的,也是 -
[?]
正好匹配?
这应该导致 ?
而不是 <?
最佳答案
同理o*?bar
火柴oobar
在foobar
.即使量词是非贪婪的,正则表达式也会尝试以所有可能的方式从第一个字符开始匹配,然后再继续下一个字符。
首先是 .??
匹配一个空字符串,但是当正则表达式引擎回溯到它时,它匹配 <
, 从而使正则表达式的其余部分匹配,而不将匹配的起始位置移动到下一个字符。
关于python - 正则表达式匹配超过预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589226/