为什么Python findall()和finditer()在unanchored.*搜索中返回空匹配?

前端之家收集整理的这篇文章主要介绍了为什么Python findall()和finditer()在unanchored.*搜索中返回空匹配?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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)]

解决方法

>.*为零或更多,所以一旦消耗了四个字符,最后的零长度空字符串(不接触任何匹配的开始)仍然存在;和 >末尾的空字符串与模式不匹配 – 它不会在字符串的开头处开始.

猜你在找的Python相关文章