【问题标题】:How to match a word either after a specific pattern or before another specific pattern?如何在特定模式之后或另一个特定模式之前匹配单词?
【发布时间】:2021-04-29 12:16:44
【问题描述】:

我必须在一个特定模式之后或另一个特定模式之前匹配一个单词。 因此,它应该匹配<pattern_1> <word><word> <pattern_2>。我可以使用| 来做到这一点。

regex_pattern = r'((?<=pattern_1)word|word(?=pattern_2)'

但是,有没有更好的方法?

【问题讨论】:

  • 您问题的措辞似乎倒退了。根据您的正则表达式,您实际上是在尝试在一个特定模式之后或另一个特定模式之前匹配一个单词
  • @Booboo 是的,我想是的。我会做出改变。感谢您指出这一点。
  • @itprorh66 如果我已经解决了问题,那么我会回答并关闭它。我期待有人会给出一些答案。
  • 如果没有看到您的任何数据或您编写的任何产生问题的代码,很难回答您的问题。请查看 Jon Skeet 的优秀博文 WRITING THE PERFECT QUESTION 以获取更新问题的指导。有关提出好问题的更详细教程,请参阅 Eric S. Raymond 的网站 How To s The Smart Way
  • 我终于可以发布答案了。如果你想给我荣誉,我可以发布带有解释的解决方案。

标签: python-3.x regex


【解决方案1】:

我建议使用

(?<=(pattern_1 ))?word(?(1)|(?=( pattern_2)))
(?<=(pattern_1 ))?word(?(1)| pattern_2)

请参阅regex demo详情

  • (?&lt;=(pattern_1 ))? - 一个后向构造,可选地需要在当前位置左侧紧邻的 pattern 1 子字符串(捕获到第 1 组
  • word - 一个字符串
  • (?(1)|(?=( pattern_2))) - 执行以下操作的条件构造:
    • ?(1) - 如果第 1 组匹配,则什么也不做
    • | - 否则
    • (?=( pattern_2)) - 一个正向的前瞻,它匹配并立即捕获当前位置右侧的 pattern_2 字符串。看来您也可以只使用 pattern_2 而不是先行模式(但它不会被捕获)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2020-03-09
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多