Notepad++正则替换需先启用“正则表达式”模式,否则.*等无效;仅支持Boost.Regex子集,不支持PCRE;跨行匹配用\R或勾选“.匹配换行符”;多文件替换须用“在文件中查找”并单独启用正则。

Notepad++ 正则替换不生效?先确认是否启用了“正则表达式”搜索模式
默认情况下,Notepad++ 的查找/替换窗口使用的是“普通”模式,.*、\d+ 这类写法会被当作字面量处理,根本不会匹配。必须手动勾选 匹配模式 下的 正则表达式 选项(不是“扩展”也不是“普通”)。
常见错误现象:查找内容 填了 foo\d+,却一个都找不到——大概率是没点那个单选框。注意:v7.9+ 版本该选项在查找对话框底部,叫 搜索模式,三个单选按钮中选中 正则表达式。
- Windows 版 Notepad++ 不支持 Perl 兼容语法(PCRE),只支持基于 Boost.Regex 的子集,不支持
(?i)内联标志或\K -
\r\n表示 Windows 换行,\n在 Unix/Linux 文件中才有效;混合换行时建议用\R(匹配任意换行符) - 中文、emoji 等 Unicode 字符可直接写入正则,无需转义,但需确保文件编码为 UTF-8(无 BOM 最稳妥)
想批量替换多行内容?用 \R 和点号通配要注意贪婪性
Notepad++ 默认的 . 不匹配换行符,所以 start.*end 在跨行场景下完全失效。必须配合 \R 显式匹配换行,或启用 . 匹配换行符 复选框(位于正则模式下方)。
例如:把所有 /* ... */ 块注释替换成 // 单行注释,不能写 /\*.*?\*/(即使开了 . 匹配换行符,也容易因贪婪匹配越界)。更稳妥写法是:
查找内容:/\*(.*?)\*/\R? 替换为:// $1
-
?是懒惰量词,必须加,否则.*会从第一个/*一直吃到文件末尾最后一个*/ -
\R?覆盖注释后可能存在的空行,避免替换后多出空白行 - 捕获组用
$1引用,不是\1(后者在“替换为”框里无效)
批量处理多个文件时,别漏掉“在文件中查找”和“全部替换”按钮的区别
想改整个项目里的几十个文件?不能只在当前文档点“全部替换”。必须打开 搜索 → 在文件中查找(快捷键 Ctrl+Shift+F),填好查找/替换内容、目录路径、文件过滤器(如 *.js;*.ts),再点 全部替换。
- “在文件中查找”窗口里的
全部替换是真正批量写入磁盘的操作,会弹出确认框,且不可撤销 - 它不走当前文档的“正则表达式”开关状态,而是独立控制——务必在该窗口里再次勾选
正则表达式 - 过滤器支持分号分隔,但不支持通配符嵌套,
src/**/*.py无效,只能写*.py并指定目录为src - 如果目标文件被其他程序占用(如 VS Code 正在编辑),Notepad++ 会跳过并提示,不会报错中断
替换后格式错乱?检查是否意外替换了缩进或空格
正则太宽泛时,^ +(行首空格)或 \s+ 很容易吃掉原本用于对齐的空白,导致代码缩进崩溃。尤其在处理 Python 或 YAML 时极其危险。
- 优先用
[ \t]明确限定字符集,比\s更安全(\s在 Notepad++ 中会匹配\r\n,引发意外换行) - 修改缩进相关逻辑前,先用
查找全部预览匹配范围,肉眼确认每处是否合理 - 涉及 JSON 或 XML 的属性值替换,强烈建议先备份整个文件夹——Notepad++ 批量替换没有事务回滚
最常被忽略的一点:正则替换本身不改变文件编码。如果原始文件是 GBK,而你用 UTF-8 正则匹配中文,结果可能乱码。操作前统一用 编码 → 转为 UTF-8,再执行替换。


















