我有关于正则表达式的问题.使用or构造时
$ python
Python 2.7.3 (default, Sep 26 2012, 21:51:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> for mo in re.finditer('a|ab', 'ab'):
... print mo.start(0), mo.end(0)
...
0 1
Run Code Online (Sandbox Code Playgroud)
我们只得到一个匹配,这是预期作为第一个最左边的分支,被报告被接受.我的问题是它是否可能以及如何构造一个正则表达式,它将同时产生(0,1)和(0,2).而且,对于任何形式的正则表达式,一般如何做到这一点r1 | r2 | ... | rn.
同样,才有可能达到这一目的*,+和?结构?默认情况下:
>>> for mo in re.finditer('a*', 'aaa'):
... print mo.start(0), mo.end(0)
...
0 3
3 3
>>> for mo in re.finditer('a+', 'aaa'):
... print mo.start(0), mo.end(0)
...
0 3
>>> for mo in re.finditer('a?', 'aaa'):
... print mo.start(0), mo.end(0)
...
0 1
1 2
2 3
3 3
Run Code Online (Sandbox Code Playgroud)
第二个问题是为什么空字符串在末尾匹配,而不是在其他任何地方匹配*和??
编辑:
我想我现在意识到这两个问题都是无稽之谈:正如@mgilson所说,re.finditer只返回非重叠的匹配,我猜每当正则表达式接受(部分)字符串时,它就会终止搜索.因此,使用Python匹配引擎的默认设置是不可能的.
虽然我想知道如果Python在正则表达式匹配中使用回溯,那么在接受字符串之后让它继续搜索应该不是很困难.但这会破坏正则表达式的通常行为.
EDIT2:
这在Perl中是可能的.请参阅下面的@Qtax回答.