最常见需求是提取英文小括号内非嵌套内容,用\((1*)\)捕获并以\1替换;需勾选「正则表达式」和「.匹配新行」;空格处理、中英文括号分离、嵌套限制及bom兼容性均为关键细节。() ↩

提取英文小括号内的内容(非嵌套)
最常见需求是把 (xxx) 里的 xxx 单独拿出来,比如把 log(2026-09-04, error) 提取为 2026-09-04, error。关键不是“删括号”,而是“捕获中间”。
- 查找目标填:
\(([^()]*)\)——\(和\)转义括号,[^()]*表示不包含括号的任意字符(防跨组),()包裹形成捕获组 - 替换为:
\1—— Notepad++ 只认\1~\9,不能写$1或\01 - 必须勾选「正则表达式」+「. 匹配新行」——哪怕你确定没换行,也建议打开,否则
.在某些编码下可能意外失效 - 如果原文有空格如
( abc ),想保留还是去掉?那得改捕获范围:\(\s*([^()]*)\s*\),再用\1替换,就自动去首尾空格
处理嵌套小括号(如 (a(b)c))
Notepad++ 原生不支持递归匹配,\(([^()]*)\) 遇到嵌套会停在第一对闭合处,即只捕获到 a(b。真要完整提取,得靠「循环替换」+「由内向外剥离」。
- 第一步:先清最内层,查找
\([^()]*\),替换为空 → 把(b)干掉,留下(a c) - 第二步:再查
\([^()]*\),替换为\1→ 此时已无嵌套,\1就是a c - 注意:不能一步到位用
\((.*)\),它会贪婪匹配到最后一对),比如(x)(y)会被整个抓成x)(y - 若文本量大,建议先用「标记全部」预览匹配位置,避免误删
提取中英文括号混合内容(含全角)
用户粘贴日志或从网页复制文本时,常混入中文括号 (xxx),直接套英文正则会失效。得把全角和半角分开处理,且顺序不能错。
- 先处理全角:查找
(([^()]*)),替换为\1—— 注意这里用的是中文括号字符,不是转义 - 再处理半角:查找
\(([^()]*)\),替换为\1 - 为什么不能合并写成
[((]([^()()]*)[))]?因为[((]是字符类,无法保证左右括号配对,可能把(abc)当作合法匹配 - 如果文件带 BOM(UTF-8 with BOM),
\R可能失灵,临时转存为 UTF-8(无 BOM)再操作更稳
提取后保留原行其他内容(如只取括号部分插入新字段)
不是单纯提取,而是“在原位置插入提取结果”,比如把 id=123 (userA) 改成 id=123 (userA) // userA。
- 查找目标:
(\w+=\d+)\s+\(([^()]*)\)—— 分两组:等号部分 + 括号内内容 - 替换为:
\1 (\2) // \2—— 这里\1和\2必须严格按编号顺序引用 - 别漏空格:正则里
\s+匹配多个空白,但替换串里要显式写空格,否则\1(\2)//\2会连成一片 - 若括号前有固定前缀如
name: (Tom),可简化为name:\s*\(([^()]*)\),替换name: (\1) <alias>\1</alias>
最易被忽略的是状态栏——每次打开 Ctrl+H 都得确认右下角显示「正则表达式」,静默模式下输对了也白忙。另外,\1 引用只支持一位数,\10 永远被解释为 \1 + 字符 0,别指望它捕获第十组。











