findall()
和finditer()
的Python文档声明:
结果中包含空匹配,除非他们触摸了 另一场比赛的开始
这可以证明如下:
In [20]: [m.span() for m in re.finditer('.*', 'test')]
Out[20]: [(0, 4), (4, 4)]
有人可以告诉我,为什么这个模式首先会返回一个空的匹配? .*
不应该使用整个字符串并返回一个匹配项吗?而且,如果我将模式锚定到字符串的开头,为什么最后没有空匹配? e.g。
In [22]: [m.span() for m in re.finditer('^.*', 'test')]
Out[22]: [(0, 4)]
答案 0 :(得分:10)
.*
零或更多,因此一旦消耗了四个字符,则结尾处的零长度空字符串(不会触及任何匹配的开头)仍然存在;和