【问题标题】:Regex negative lookahead ignore section of code正则表达式负前瞻忽略代码部分
【发布时间】:2021-09-23 15:43:02
【问题描述】:

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

</Question>
ABC
123
<answer>

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

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: regex notepad++ regex-negation


    【解决方案1】:

    如果你想忽略第二组,你不应该交叉匹配&lt;Question&gt;&lt;/Question&gt;

    由于(?s),点匹配每个字符,包括换行符,.* 将匹配到行尾,然后回溯到匹配所有行的&lt;answer&gt;

    您可以匹配单个字符,然后检查直接在右侧的不是&lt;Question&gt;&lt;/Question&gt;,并将/ 设为可选。

    你可能会使用

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

    模式匹配:

    • (?s-i) 内联修饰符,点匹配换行符并关闭不区分大小写的匹配
    • &lt;/Question&gt; 字面匹配
    • (?:非捕获组
      • (?!负前瞻,断言右边的不是
        • &lt;/?Question&gt; 匹配 &lt;/Question&gt;? 匹配 0 或 1 次
      • ). 如果断言为真,则匹配单个任意字符
    • )* 关闭组并选择性地重复
    • &lt;answer&gt;

    Regex demo

    【讨论】:

    • 太棒了!所以 ? 问题只查找 q ,然后查找 。看看这个词的其余部分?再次感谢您的帮助!
    • @Acme1235 我添加了模式的细分以及不同部分的描述。问号使/ 可选。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2011-10-14
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多