基本上我正在尝试使用带有正则表达式的python找到一系列连续的重复模式:
(X[0-9]+)+
例如,输入输入字符串:
YYYX4X5Z3X2
获取结果列表:
["X4X5", "X2"]
但是我得到了:
["X5", "X2"]
我已经在regexpal上测试了正则表达式并验证它是正确的,但是由于python处理“()”的方式,我无法获得所需的结果。有人可以建议吗?
答案 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]+)+)
( # 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]+)+)