最常误操作是未锚定整行导致删不全;删中间内容需分组捕获与反向引用;删多行标签必须勾选“matches newline”;嵌套结构正则无法处理。

用 ^.*关键词.*$ 删除整行(含特定字符的行)
这是最常被误操作的场景:想删掉所有含「TODO」或「测试」的行,却只写了 TODO 做普通搜索,结果只删了部分字符。必须用正则匹配整行再替换为空。
- 打开
Ctrl + H,勾选「匹配使用正则表达式」 - Find what 填:
^.*TODO.*$(^和$锚定行首行尾,确保不跨行) - Replace with 留空
- 点击「全部替换」——注意:光标需在文件开头,否则可能漏掉前面几行
⚠️ 容易踩的坑:. 默认不匹配换行符,但这里不需要;若关键词是常见字(如「的」),^.*的.*$ 会误删大量行,务必先点「查找全部」预览匹配结果。
用 (前缀)(.*?)(后缀) 只删中间内容,保留前后字符
比如要把 【abc】def【ghi】 中两个 【】 之间的内容清空,变成 【】def【】,不能靠简单删除——得靠分组捕获+反向引用。
- Find what 填:
(【)(.*?)(】)(括号分组,.*?非贪婪匹配中间任意内容) - Replace with 填:
$1$3($1是【,$3是】,跳过中间的$2) - 必须勾选「匹配使用正则表达式」,无需勾选「Matches newline」——因为目标在单行内
⚠️ 注意转义:如果前缀/后缀含正则元字符(如 *、+、?、[、^),必须加反斜杠,例如匹配 [abc] 要写成 $$(abc$$)。
删 <script></script> 标签内容时必须勾选 Matches newline
默认单行正则对多行 <script></script> 标签完全失效,因为 . 不匹配换行符,.* 会卡在第一行末尾。
- Find what 填:
(<script>]*>)[\s\S]*?(</script>)([\s\S]是兼容换行的万能字符类) - Replace with 填:
$1$2(保留标签及属性,清空内容)或<script></script>(强制归一化) - 关键:必须勾选「Matches newline」(等价于 Perl 的
/s修饰符)
⚠️ 根本限制:Notepad++ 没有 HTML 解析器,遇到 <!-- <script>...</script> --> 这类注释里的标签,也会被当成真标签处理。临时解法是先用 <!--[\s\S]*?--> 批量删注释,再处理 <script></script>。
删两个固定字符串之间的所有空格(如 【 abc 】 → 【abc】)
这不是删「之间内容」,而是删「之间特定字符」,容易混淆。目标是保留边界、压缩内部空格,不是清空整个区间。
- Find what 填:
(【)\s*(.*?)\s*(】)(把空格放在分组外,用\s*匹配零或多空格) - Replace with 填:
$1$2$3($2是非空格内容,$1和$3是边界) - 若要连内部多个空格也压成一个,可分两步:先用
\s+替换为单个空格,再用上面正则收紧边界
真正难的是嵌套结构(如 【a【b】c】)——Notepad++ 正则不支持递归匹配,这种必须靠人工或专用解析器,别硬刚。











