2014-09-03 39 views
5

Python文檔爲findall()finditer()狀態:爲什麼Python findall()和finditer()在未錨定的*搜索中返回空匹配項?

空匹配被包括在結果,除非他們觸摸 開始另一個匹配

這可以證明爲如下:

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)] 
+2

初始錨定模式如何能匹配最後的東西? – 2014-09-03 15:57:48

+0

這是一個公平點。 – Vortura 2014-09-03 16:56:28

回答

8
  1. .*零個或多個,所以一旦四個字符被消耗,在結束時的零長度空字符串(其不接觸任何匹配的開始)仍然;和
  2. 末尾的空字符串與模式不匹配 - 它不從字符串的開始處開始。
+3

確實,用'。+' – OregonTrail 2014-09-03 15:57:25

+0

試試這個啊哈!現在一切似乎都很明顯。非常感謝! – Vortura 2014-09-03 16:12:23