代码之家  ›  专栏  ›  技术社区  ›  End Anti-Semitic Hate Meiko Rachimow

如何在Notepad++中使用正则表达式来删除所有不包含特定字符串的HTML和JSON代码?

  •  0
  • End Anti-Semitic Hate Meiko Rachimow  · 技术社区  · 3 年前

    使用正则表达式(在Notepad++中),我想找到包含字符串的所有JSON部分 foo 请注意,JSON恰好嵌入到加载到Notepad++中的一组有限的HTML源代码中。

    我已经编写了以下正则表达式来完成这项任务:

    ({[^}]*foo[^}]*})

    这在所有可能的输入中都能按预期工作。

    我想改进我的工作流程,所以我不想只找到所有这样的JSON部分,而是想写一个regex到 去除 所有的HTML&做的JSON 匹配此表达式。结果将仅为包含 foo .

    我尝试使用Notepad++正则表达式 Replace 具有此功能 find 表示

    (?:({[^}]*?foo[^}]*?})|.)+

    这个 replace 表示

    $1\n\n$2\n\n$3\n\n$4\n\n$5\n\n$6\n\n$7\n\n$8\n\n$9\n\n

    这成功地适用于的最后一次出现 foo 在JSON中,但找不到其余的出现。

    如何改进代码以查找所有出现的情况?

    这里是输入和期望输出的简化的最小示例。我希望我没有过多地简化它以使其有用:

    简化输入:

    <!DOCTYPE html>
      <html>
        <div dat="{example foo1}"> </div>
        <div dat="{example bar}"> </div>
        <div dat="{example foo2}"> </div>
      </html>
    

    所需输出:

    {example foo1}
    
    {example foo2}
    
    0 回复  |  直到 3 年前
        1
  •  2
  •   Wiktor Stribiżew    3 年前

    您可以使用

    {[^}]*foo[^}]*}|((?s:.))
    

    替换为 (?1:$0\n) . 细节 :

    • {[^}]*foo[^}]*} - { ,零个或多个字符,而不是 } , foo ,零个或多个字符,而不是 } 然后 }
    • |
    • ((?s:.)) -捕获组1:任意一个字符( (?s:...) 是一个内联修饰符组,其中 . 匹配所有字符,包括换行字符,与启用时相同 . 匹配换行符 选项

    这个 (?1:$0\n) 如果组1匹配,则替换模式将替换为空字符串,否则替换为匹配文本+换行符。

    查看演示并搜索和替换对话框设置:

    enter image description here

        2
  •  1
  •   Haji Rahmatullah    3 年前

    更新

    评论部分是完整的,试图在这里建议一个代码,
    如果这与您的预期结果有点接近,请告诉我,

    发现 ({.+?[\n]*foo[ \d]*})|.*?
    全部替换: $1

    enter image description here 还添加了托托的例子