gpt4 book ai didi

python - 匹配多个重复组的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:25 24 4
gpt4 key购买 nike

我有以下字符串:

s = " 3434 garbage workorders: 138 waiting, 2 running, 3 failed, 134 completed"

我想解析“工单”之后的状态和计数。我试过以下正则表达式:

r = r"workorders:( (\d+) (\w+),?)*"

但这只会返回最后一组。我怎样才能返回所有组?

附注我知道我可以在 python 中做到这一点,但想知道是否有纯正则表达式解决方案

>>> s = " 3434 garbage workorders: 138 waiting, 2 running, 3 failed, 134 completed"
>>> r = r"workorders:( (\d+) (\w+),?)*"
>>> re.findall(r, s)
[(' 134 completed', '134', 'completed')]
>>>

输出应该接近

[('138', 'waiting'), ('2', 'running'), ('3', 'failed'), ('134', 'completed')]

最佳答案

对于示例中的文本,您可以这样尝试:

(?:(\d+) (\w+)(?=,|$))+

解释

  • 非捕获组 (?:
  • 一个或多个数字的捕获组 (\d+)
  • 一个空格
  • 一个或多个单词字符的捕获组 (\w+)
  • 一个肯定的 lookhead,它断言后面是逗号或字符串的结尾 (?=,|$)
  • 关闭非捕获组并重复一次或多次)+

Demo

那会给你:

[('138', 'waiting'), ('2', 'running'), ('3', 'failed'), ('134', 'completed')]

关于python - 匹配多个重复组的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48010179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com