2014-12-23 34 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]+)+)