使用正则表达式(在 Notepad++ 中),我想查找包含字符串 foo
的所有 JSON 部分。请注意,JSON 恰好嵌入到加载到 Notepad++ 中的一组有限的 HTML 源代码中。
我编写了以下正则表达式来完成此任务:
({[^}]*foo[^}]*})
这在所有可能的输入中都按预期工作。
我想改进我的工作流程,因此我想编写一个正则表达式来删除所有不不的 HTML 和 JSON,而不是仅仅查找所有此类 JSON 部分匹配这个表达式。结果将仅是包含 foo
的 JSON 部分。
我尝试使用 Notepad++ 正则表达式 Replace
功能与此 find
表达式:
(?:({[^}]*?foo[^}]*?})|.)+
以及这个替换
表达式:
$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
这成功地解决了 JSON 中最后一次出现的 foo
的情况,但找不到其余的出现情况。
如何改进我的代码以查找所有出现的情况?
这是输入和所需输出的简化最小示例。我希望我没有将其简化太多以使其有用:
简化输入:
<!DOCTYPE html>
<html>
<div dat="{example foo1}"> </div>
<div dat="{example bar}"> </div>
<div dat="{example foo2}"> </div>
</html>
所需输出:
{example foo1}
{example foo2}
最佳答案
你可以使用
{[^}]*foo[^}]*}|((?s:.))
替换为(?1:$0\n)
。 详细信息:
{[^}]*foo[^}]*}
-{
,除}
之外的零个或多个字符,foo
,除}
之外的零个或多个字符,然后是}
|
- 或((?s:.))
- 捕获组 1:任意一个字符 ((?s:...)
是一个内联修饰符组,其中.
匹配所有字符,包括换行符,与启用.
匹配换行符 选项相同)。
如果第 1 组匹配,(?1:$0\n)
替换模式将替换为空字符串,否则替换为匹配文本 + 换行符。
查看演示以及搜索和替换对话框设置:
关于html - 如何在Notepad++中使用regex(正则表达式)删除所有不包含特定字符串的HTML和JSON代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69331382/