繁体   English   中英

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

[英]multiple group matches for single regex

我正在使用python解析日志,需要从中快速获取一些值

这是简单的等效正则表达式和用法示例

pat = re.compile("(1(2[3456]+2)+1)*")

它没有按预期工作,只有pat.match()返回最后一个匹配组.groups()

这类问题最简单的解决方案是什么?

更新 (因为维基引擎说使用编辑而不是创建新帖子):

当然,我需要重复比赛。

to_match="1232112542254211232112322421"

正则表达式需要递归地应用两次。 我能忍受,但有什么选择吗?

您正在重复捕获的组而不是捕获重复的组,这就是您只获得最后一次捕获的原因。

你应该使用

pat = re.compile("((1(2[3456]+2)+1)*)")

有关重复捕获组与捕获重复组http://www.regular-expressions.info/captureall.html的更多信息,请参阅此处

好的,试试这个(但只有在你学会了如何接受答案之后;-))

s = "123321124421125521"
pat = re.compile("(1(2[3456]+2)+1)")
print pat.findall(s)

删除量词并使用findall() 这将导致此列表:

[('123321','2332'),(''124421','2442'),(''125521','2552')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM