首页 > 解决方案 > 如何在特定模式之后或在另一个特定模式之前匹配单词?

问题描述

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

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

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

标签: python-3.xregex

解决方案


我建议使用

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

请参阅正则表达式演示详情

  • (?<=(pattern_1 ))?- 一个后视构造,可选地需要一个pattern 1子字符串(捕获到组 1中)紧挨当前位置的左侧
  • word- 一个字符串
  • (?(1)|(?=( pattern_2)))- 执行以下操作的条件构造:
    • ?(1)- 如果第 1 组匹配,则不执行任何操作
    • |- 别的
    • (?=( pattern_2))- 一个积极的前瞻,匹配并立即捕获 pattern_2当前位置右侧的字符串。看来您也可能只使用 pattern_2而不是前瞻模式(但那时它不会被捕获)。

推荐阅读