Notepad++正则替换前必须勾选“正则表达式”模式,否则d、.*等语法被当字面量处理而静默失效;提取文本靠分组捕获+“$1”引用实现,并需注意.不匹配换行、中文标点须原样输入、反斜杠需双写转义。

正则替换前必须勾选“匹配模式:正则表达式”
Notepad++ 默认使用“普通”搜索模式,.*、d+ 这类正则语法不会生效,直接当字面量处理。不勾选就永远替换失败——这是 90% 新手卡住的第一步。
操作路径:查找 → 查找(Ctrl+F)→ 搜索模式 → 勾选「正则表达式」;批量替换同理,在 替换 标签页也必须确认该选项已启用。
注意:扩展(
,
, ) 和 正则表达式 是互斥选项,不能同时选;若误选了扩展模式,
会被当作换行符字面量,而非正则中的换行断言。
提取文本本质是“替换为捕获组”,不是“查找后复制”
Notepad++ 没有独立的“提取”按钮,所谓提取,就是用 替换为 把整行/大段内容替换成你想要的子串,靠的是 分组捕获 + $1、$2 引用。
例如从 name: "Alice", age: 32, city: "NYC" 中只留姓名:
查找目标:<code>name:s*"([^"]*)".*</code> 替换为:<code>$1</code>
关键点:
-
([^"]*)是非贪婪捕获:匹配双引号内任意非引号字符,避免跨到下一个字段 -
.*必须写在后面,确保整行被覆盖,否则未匹配部分会残留 -
$1只能引用()内的内容,不能用(那是查找时的反向引用写法)
常见陷阱:点号不匹配换行、中文括号、转义混乱
默认情况下,. 不匹配换行符,所以跨行文本(如 JSON 多行格式)会失效。解决方法只有两个:
- 手动把文本转成单行(不现实)
- 改用
[sS]或[dD]替代.,它们强制匹配所有字符,包括换行
其他高频翻车点:
- 中文标点如「」、()、【】必须原样输入,
(≠(,正则里不自动兼容 -
在 Notepad++ 正则中本身要转义,想匹配字面量反斜杠得写\\(查找框里显示为\,但实际需输两对) - 开启
. 匹配换行符选项(位于正则模式下方小勾)看似方便,但它会让^/$失效(变成匹配每行首尾),慎用
提取多行结构化数据时,优先用“替换全部+空行清理”组合技
比如从日志中提取所有 ERROR.*?stacktrace 块,不能只靠一次替换——因为 .*? 默认不跨行,而 stacktrace 肯定换行。
推荐流程:
- 第一步:用
查找目标:<code>ERROR[sS]*?stacktrace→ 替换为:$0($0表示整个匹配,加换行便于后续处理) - 第二步:再执行一次替换,把中间多余空行干掉:
查找:<code> s*→ 替换为: - 第三步:删掉没被匹配到的原始行(可用列编辑或插件
TextFX删除空行)
这个思路比硬写一个超长正则更稳——Notepad++ 的正则引擎对嵌套和回溯控制较弱,过度依赖单次复杂匹配容易假死或漏匹配。
真正难的不是写出正则,而是判断哪些文本必须先规整格式、哪些边界要用 [sS]、哪些地方宁可多走两步也不能赌引擎行为。


















