如何在Notepad++中用正则匹配JSON对象中指定的两个键值对组合?
在Notepad++中用正则匹配包含特定键值对的JSON对象
核心问题原因
你的正则失效是因为Notepad++默认正则引擎里,.元字符不匹配换行符,而JSON对象的键值对分布在多行,导致.*?无法跨换行匹配内容。
两种可行解决方案
方案1:用[\s\S]替代.匹配任意字符(含换行)
[\s\S]能匹配所有空白/非空白字符,自然包含换行。针对你的需求,正则表达式如下:
匹配ordertyp=TINOP在status=deleted之前的JSON对象
\{[^}]*"ordertyp"\s*:\s*"TINOP"[^}]*"status"\s*:\s*"deleted"[^}]*\}
支持两个键值对顺序颠倒的情况
如果JSON对象中两个键的位置不确定,用分支匹配:
\{[^}]*("ordertyp"\s*:\s*"TINOP"[^}]*"status"\s*:\s*"deleted"|"status"\s*:\s*"deleted"[^}]*"ordertyp"\s*:\s*"TINOP")[^}]*\}
方案2:开启Notepad++的“匹配换行符”选项
- 打开Notepad++的查找替换对话框(快捷键
Ctrl+F) - 切换到正则表达式模式
- 勾选左下角的匹配换行符(部分旧版本显示为
.匹配换行)
此时可以使用更简洁的正则:
固定顺序匹配
\{.*?"ordertyp"\s*:\s*"TINOP".*?"status"\s*:\s*"deleted".*?\}
支持顺序颠倒
\{.*?(("ordertyp"\s*:\s*"TINOP".*?"status"\s*:\s*"deleted")|("status"\s*:\s*"deleted".*?"ordertyp"\s*:\s*"TINOP")).*?\}
注意事项
- 上述正则仅适用于单层JSON对象,如果JSON存在嵌套结构,可能出现误匹配(
[^}]*会在遇到第一个闭合大括号时停止)。 - 处理超大型JSON文件时,复杂正则可能导致卡顿,建议先拆分文件或使用增量查找功能。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

