【发布时间】:2014-02-20 20:03:41
【问题描述】:
我正在尝试regex lazy matches。
当我尝试这个时:
>>> text='<em>Hello <>World</em>'
>>> pattern3=re.compile('<.*?>')
>>> for mat in re.findall(pattern3,text):
... print mat
...
<em>
<>
</em>
它按预期工作,并给出了三个可能的匹配项 但是当我尝试这个时:
>>> text="1011"
>>> pattern1=re.compile('1.*?1')
>>> for mat in re.findall(pattern1,text):
... print mat
...
101
我只得到一个输出,但我应该得到101 and 11,为什么11 不匹配。
我的regex '1.*?1' 查找1,后跟零个或多个任何内容,然后再次查找1。
【问题讨论】:
-
简短的回答是因为重叠匹配。第二个
1在第一个匹配中匹配,并且不能再次“参与”另一个匹配。尝试四处寻找重叠的匹配项。我敢肯定它以前被问过。例如this 也许?
标签: python regex non-greedy