2014-12-23 64 views
3

基本上我試圖找到一系列使用具有正則表達式的蟒連續重複圖案:匹配依次重複括號與Python正則表達式

(X[0-9]+)+ 

例如,給輸入字符串:

YYYX4X5Z3X2 

獲取結果的列表:

["X4X5", "X2"] 

不過我不是得到:

["X5", "X2"] 

我已經測試了regexpal正則表達式並驗證它是正確的。然而,由於蟒蛇的方式對待「()」我無法得到期望的結果。有人可以建議嗎?

回答

4

把你捕獲組轉化爲非捕獲(?:...)組代替...

>>> import re 
>>> re.findall(r'(?:X[0-9]+)+', 'YYYX4X5Z3X2') 
['X4X5', 'X2'] 

又如:

>>> re.findall(r'(?:X[0-9]+)+', 'YYYX4X5Z3X2Z4X6X7X8Z5X9') 
['X4X5', 'X2', 'X6X7X8', 'X9'] 
3

修改你的模式,像這樣

((?:X[0-9]+)+) 

Demo

(    # Capturing Group (1) 
    (?:   # Non Capturing Group 
    X   # "X" 
    [0-9]  # Character Class [0-9] 
    +   # (one or more)(greedy) 
)    # End of Non Capturing Group 
    +    # (one or more)(greedy) 
)    # End of Capturing Group (1) 
3

您需要爲第一圖案非捕獲組(?:<pattern>)給:

((?:X[0-9]+)+)