findall()和finditer()的
Python文档声明:
Empty matches are included in the result unless they touch the
beginning of another match
这可以证明如下:
In [20]: [m.span() for m in re.finditer('.*','test')] Out[20]: [(0,4),(4,4)]
谁能告诉我,为什么这个模式首先会返回一个空的匹配?不应该.*消耗整个字符串并返回一个匹配?而且,如果我将模式锚定到字符串的开头,为什么最后没有空匹配?例如
In [22]: [m.span() for m in re.finditer('^.*','test')] Out[22]: [(0,4)]
解决方法
>.*为零或更多,所以一旦消耗了四个字符,最后的零长度空字符串(不接触任何匹配的开始)仍然存在;和 >末尾的空字符串与模式不匹配 – 它不会在字符串的开头处开始.