Notepad++正则替换需手动启用“正则表达式”模式,否则\d等被当字面量;跨行匹配须勾选“.匹配新行”;捕获组引用仅支持\1~\9;清洗换行应分步:先合并空行、再删单空行、最后统一换行符。

正则模式开关不启用,所有\d都当字面量处理
Notepad++ 正则替换最常被卡死的地方,就是右下角没显示“正则表达式”——它不会报错,也不会提醒,只会安静地把 \d 当成反斜杠加字母 d 去找,结果当然找不到任何数字。你输 ^第\d+章$ 却匹配不到“第12章”,八成是这一步漏了。
必须手动确认:Ctrl + H → 查看窗口右下角文字 → 若不是“正则表达式”,立刻单选切换;关闭再重开一次,再次核对。老版本(v7.8 及以下)还可能因 BOM 导致 \R 失效,可先用“编码 → 转为 UTF-8 无 BOM”再操作。
跨行匹配必须开“. 匹配新行”,否则^和$只作用于单行
想批量提取日志里的错误块(比如从 Error: 开始,到下一个空行结束),但用 Error:.*?(\r\n\r\n|$) 却只捕获第一行?大概率是没勾选“. 匹配新行”。默认情况下 . 不匹配换行符,^ 和 $ 也只锚定单行首尾。
启用后,才能真正实现段落级匹配:
-
^Error:.*?(\r\n\r\n|$)配合“. 匹配新行”,可捕获含多行的完整错误块 - 若文件是 Unix 换行(只有
\n),请用\n\n替代\r\n\r\n - Notepad++ 7.9+ 推荐统一用
\R,它能自动识别\r\n、\n、\r
捕获组引用只认\1~\9,别写$1或\01
想把 name="Alice", age=30 替换成 姓名:Alice,年龄:30,写成查找 name="([^"]*)", age=(\d+)、替换为 姓名:\1,年龄:\2 就对了。但如果你写成 姓名:$1,年龄:$2 或 姓名:\01,Notepad++ 直接忽略捕获,原样输出 $1 或 \01。
要点很实在:
- 括号从左到右编号,嵌套也按左括号顺序算,最多只支持
\1到\9 -
\10被解释为\1+ 字符0,不是第十个捕获组 - 非贪婪修饰符
?很关键:用.*?而非.*,避免一口气吞掉多个字段
清理空行和混合换行符时,顺序和写法不能颠倒
面对一份 Windows 生成但混入 Unix 换行的日志,直接搜 \r\n 全替为空格,可能把原本的 \r\n\r\n(两个空行)变成 (两个空格),反而更难读。真实清洗要分步:
先合并连续空行:\r\n\r\n → \r\n(Windows)或 \n\n → \n(Unix)
再删单空行:^\s*$\r?\n → 空(注意 \r?\n 适配两种换行)
最后处理换行符统一化(如全转为 \n):\r\n → \n,但务必在前两步之后做——否则会把刚合并好的 \r\n 又拆开。
实际中,\R 是更稳的选择,但它在含 BOM 的 UTF-8 文件里可能失效,这点容易被跳过。


















