使用Notepad++正则移除含数组类型Bilderliste的JSON条目
问题分析
你需要匹配JSON数组中所有"Bilderliste"值为数组的对象条目(以便删除),但之前的正则因非贪婪匹配未限制在单个对象内,导致跨对象匹配,同时负向回顾的位置逻辑错误,无法精准定位目标条目。
正确正则方案
要单独匹配每个"Bilderliste"为数组的JSON对象,可使用以下正则:
\{[^{}]*?"Bilderliste":\[[^\]]*\][^{}]*\}
如果要处理条目间的逗号(避免删除后留下多余逗号),可加上可选的前导逗号和空白:
,?\s*\{[^{}]*?"Bilderliste":\[[^\]]*\][^{}]*\}
正则解释
,?:匹配条目前可选的逗号,处理多条目间的分隔\s*:匹配任意空白字符,兼容多行格式化的JSON\{:匹配JSON对象的起始符号[^{}]*?:非贪婪匹配对象内内容,直到找到目标字段"Bilderliste":"Bilderliste":\[[^\]]*\]:精准匹配"Bilderliste"值为数组的情况,\[[^\]]*\]匹配数组内容(适配你的示例场景,若数组有嵌套]需调整)[^{}]*?:匹配对象内剩余内容,直到对象结束\}:匹配JSON对象的结束符号
Notepad++操作步骤
- 打开目标JSON文件,按
Ctrl+H打开替换窗口 - 在「查找模式」中选择「正则表达式」,勾选「匹配新行」(适配多行JSON)
- 「查找内容」输入上述正则,「替换为」留空
- 点击「全部替换」,即可删除所有
"Bilderliste"为数组的条目 - 最后检查JSON数组首尾,若有多余逗号(如
[,...或...,]),执行两次补充替换:- 查找:
\[,\s*,替换为\[ - 查找:
\s*,\],替换为\]
- 查找:
示例测试结果
原示例JSON执行替换后,将仅保留"Bilderliste":null的条目:
[{"ItemID":99999,"VariantID":24527,"TechnicalData":null,"Bilderliste":null,"createdAt":"2019-08-30T00:00:00+02:00"}]
如果你的实际需求是保留数组条目、删除null条目,只需将正则改为匹配"Bilderliste":null的对象:
,?\s*\{[^{}]*?"Bilderliste":null[^{}]*\}
执行替换后即可得到你期望的单数组条目结果。
你之前正则的问题
你使用的((\{)(.*?))(?<!Bilderliste\"\:null,)(\"createdAt)(.*?)(\})存在两个核心问题:
.*?非贪婪匹配未限制在单个JSON对象内,会跨对象匹配内容(比如从null条目开头匹配到数组条目结尾)- 负向回顾
(?<!Bilderliste\"\:null,)仅检查"createdAt"前的位置,无法确保整个对象内的"Bilderliste"值,逻辑定位错误
内容的提问来源于stack exchange,提问作者user1515730
相关产品推荐
相关产品推荐

