单个正则表达式的多个分组匹配
我正在用Python解析一个日志文件,需要快速提取一些值。
这是一个简单的正则表达式和使用示例。
pat = re.compile("(1(2[3456]+2)+1)*")
但是它没有按预期工作,pat.match().groups()只返回了最后一个匹配的结果。
对于这种问题,最简单的解决方案是什么呢?
更新(正如维基引擎所说,应该编辑而不是创建新帖子):
我当然需要重复的匹配结果。
to_match="1232112542254211232112322421"
正则表达式的查找需要递归地应用两次。我可以接受这样,但有没有其他选项呢?
2 个回答
1
你现在是在重复一个已经捕获的组,而不是捕获一个重复的组,这就是你只能得到最后一个结果的原因。
你应该使用
pat = re.compile("((1(2[3456]+2)+1)*)")
想了解更多关于重复捕获组和捕获重复组的区别,可以查看这里 http://www.regular-expressions.info/captureall.html
1
好的,试试这个(不过在你学会如何接受答案之前不要急着尝试哦 ;-))
s = "123321124421125521"
pat = re.compile("(1(2[3456]+2)+1)")
print pat.findall(s)
去掉量词,改用 findall()
。这样会得到这个列表:
[('123321', '2332'), ('124421', '2442'), ('125521', '2552')]