单个正则表达式的多个分组匹配

5 投票
2 回答
1307 浏览
提问于 2025-04-17 05:50

我正在用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')]

撰写回答