我正在使用python解析日志,需要从中快速获取一些值
这是简单的等效正则表达式和用法示例
pat = re.compile("(1(2[3456]+2)+1)*")
它不能按预期工作,只有pat.match()返回最后一个匹配组.groups()
解决此类问题的最简单方法是什么?
已更新(因为维基引擎说使用编辑而不是创建新帖子):
当然,我需要重复比赛。
to_match="1232112542254211232112322421"
正则表达式需要递归地应用两次。我能忍受,但有什么选择吗?
答案 0 :(得分:1)
您正在重复捕获的组而不是捕获重复的组,这就是您只获得最后一次捕获的原因。
您应该使用
pat = re.compile("((1(2[3456]+2)+1)*)")
有关重复捕获组与捕获重复组http://www.regular-expressions.info/captureall.html
的更多信息,请参阅此处答案 1 :(得分:1)
好的,试试这个(但只有在你学会了如何接受答案之后;-))
s = "123321124421125521"
pat = re.compile("(1(2[3456]+2)+1)")
print pat.findall(s)
删除量词并改为使用findall()
。这将导致此列表:
[('123321','2332'),('124421','2442'),(''125521','2552')]