使用Python Regex匹配顺序重复的括号

时间:2014-12-23 03:12:12

标签: python regex

基本上我正在尝试使用带有正则表达式的python找到一系列连续的重复模式:

(X[0-9]+)+

例如,输入输入字符串:

YYYX4X5Z3X2

获取结果列表:

["X4X5", "X2"]

但是我得到了:

["X5", "X2"]

我已经在regexpal上测试了正则表达式并验证它是正确的,但是由于python处理“()”的方式,我无法获得所需的结果。有人可以建议吗?

3 个答案:

答案 0 :(得分:4)

将您的捕获组变为非捕获(?:...)组而不是......

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

另一个例子:

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

答案 1 :(得分: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)

答案 2 :(得分:3)

您需要为第一个模式提供非捕获组(?:<pattern>)

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