【问题标题】:How to match all groups before a pattern如何匹配模式之前的所有组
【发布时间】:2020-07-07 23:58:09
【问题描述】:

我想匹配以下模式并获取END 之前的所有匹配组? (python 正则表达式)

string = "BEGIN AA 123 BB 222 END CC 456"
pattern = r"([A-Z]{2}\s\d{3})"

这会返回三个匹配项,包括CC 456,但我只想要END之前的前两组

我尝试使用前瞻,但只返回第二个匹配组:(

【问题讨论】:

  • 这是一种组装加工形式吗?我不相信正则表达式是解决这个问题的合适工具。
  • 我知道你想要this。然而,您选择了返回 "BEGIN AA 123 BB 222" 的答案。此外,如果字符串是"BEGIN AA 123 BB 22 END CC 456",则链接处的代码返回['AA 123'](我理解你想要的),而选定的答案返回"BEGIN AA 123 BB 22"。我不明白为什么后者有帮助。

标签: python regex


【解决方案1】:

不要试图用一块石头杀死所有的鸟。有时正则表达式不是最好的工具。将字符串拆分为两部分,并将正则表达式模式匹配仅应用于第一部分。

first_part = string.split(" END ")[0]

【讨论】:

  • 是的,这可能是最好的,但正则表达式也可以:([A-Z]{2}\s\d{3})(?=.*END)
  • Doh - 我试过 ([A-Z]{2}\s\d{3}).*(?=END) 代替。谢谢你们俩!你们太快了
  • 您可能希望添加单词边界以避免匹配,例如,"BEND":(?=.*\bEND\b)
猜你喜欢
  • 2022-09-24
  • 1970-01-01
  • 2017-09-16
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
相关资源
最近更新 更多