正则表达式否定前瞻忽略代码部分

时间:2021-07-14 16:26:30

标签: regex notepad++ regex-negation

我有一些正则表达式可以在 xml 中找到一段代码。但是,我希望它使用 notepad++ 忽略在 middle.im 中设置了特定标记的一段代码。 下面是我的代码的简化版本。

</Question>
ABC
123
<answer>

</Question>
ABC
<Question>
123
<answer>

我的正则表达式选择了两个组,但我希望它因为标签而忽略第二个组

这是我试过的正则表达式。

(?s-i)<\/Question>(?:(?!\<Question>)).*(<answer>)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果您想忽略第二组,则不应交叉匹配 <Question></Question>

由于 (?s),点匹配每个字符,包括换行符,.* 将匹配到行尾,然后回溯以匹配 <answer> 匹配所有行。< /p>

您可以匹配单个字符,然后检查右边的内容不是 <Question></Question>,并将 / 设为可选。

你可能会使用

(?s-i)</Question>(?:(?!</?Question>).)*<answer>

模式匹配:

  • (?s-i) 内联修饰符,点匹配换行符并关闭不区分大小写的匹配
  • </Question> 逐字匹配
  • (?: 非捕获组
    • (?! 否定前瞻,断言直接在右边的不是
      • </?Question> 匹配 </Question>? 匹配 0 次或 1 次
    • ). 如果断言为真,则匹配单个任意字符
  • )* 关闭群组并可选择重复
  • <answer>

Regex demo

enter image description here

相关问题