2016-10-20 51 views
3

我疑惑這個:Python正則表達式組:我如何獲得所有組?

>>> import re 
>>> re.match(r"(?P<all>-(?P<one>\w+))*","-ab-cde-fghi-jkl-mn").groups() 
('-mn', 'mn') 
>>> re.match(r"(?P<all>-(?P<one>\w+)*)","-ab-cde-fghi-jkl-mn").groups() 
('-ab', 'ab') 

我如何獲得所有條款的列表,像理想

["ab","cde","fghi","jkl","mn"] 

"-ab-cde-fghi-jkl-mn" 

是沒關係。

(請注意,我充分意識到str.split("-")這是一個問題關於re - 如何整套匹配。)

+1

「match」的文檔說:「如果字符串開頭的零個或多個字符與正則表達式模式匹配,則返回一個相應的匹配對象。」所以預計只有一場比賽,有兩組。 –

+1

如果您使用PyPi正則表達式模塊,您可以通過'.captures'訪問所有組 –

回答

4

隨着re.findall()

例子:

s = "-ab-cde-fghi-jkl-mn" 
re.findall(r'[a-z]+', s) 

輸出:

['ab', 'cde', 'fghi', 'jkl', 'mn'] 
1

它的工作方式與默認情況下在.NET中一樣。

Python不支持這個。你可以得到在Python最接近的行爲,將重複上捕獲的子字符串匹配:

>>> match = re.match(r"(?P<all>(?:-(?P<one>\w+))*)","-ab-cde-fghi-jkl-mn") 
>>> re.findall(r"-(?P<one>\w+)", match.group("all")) 
['ab', 'cde', 'fghi', 'jkl', 'mn'] 

這可能變得複雜,如果內側圖案是不是非常簡單。

相關問題