推荐写法是^s*$$(\r\n|\n|\r)+\s*$$( | | )+,需勾选“匹配新行”,替换时用R或手动输入空行;旧版Notepad++用( | | )替代R。

正则匹配连续多个空行的正确写法
Notepad++ 默认使用 PCRE(Perl 兼容正则),但换行符处理和大多数编辑器一样,需显式匹配
(Windows)或
(Unix/Linux/macOS)。直接写 ^s*$ 并开启“匹配新行”选项,无法可靠捕获“连续多个空行”,因为 ^ 和 $ 是行首/行尾锚点,不跨行工作。
真正能一次匹配多空行的模式是:
^s*$( | | )s*$( | | )s*$
但这只匹配恰好两个空行。要匹配“两个及以上”,得用量词 + 非贪婪控制:
- 推荐用:
^s*$( | | ){2,}—— 匹配一个空行 + 至少两个换行符(即 ≥2 个连续空行) - 更稳妥(兼容不同换行风格):
^s*$( | | )+s*$( | | )+,然后替换为单个 - 注意:必须勾选
匹配新行(“. 匹配换行符”不用勾);否则$后的换行符不会被纳入匹配范围
替换为单个空行时的常见错误
很多人想把 3 个空行替成 1 个,结果替出双空行甚至没变化——问题常出在替换内容没写对。
- 错误写法:
或—— 这依赖当前文档换行格式,若文件是 Unix 风格却写,会多出字符 - 正确做法:替换框里直接输入一个真正的空行(光标回车一次),或用
R(Notepad++ 支持的通用换行符元字符) - 最稳方案:
R+ 一个空行 → 即替换为R不对,应为R后再手动按一次回车,让替换结果是“一行空白 + 换行符”,等价于一个空行 - 验证方法:替换后按
Ctrl+Shift+P显示所有字符,确认只有(或)且前后无多余空格
为什么 ^s*$s*^s*$ 不生效
这个写法看似“两行空行”,实际在 Notepad++ 中完全无效,因为 ^ 和 $ 是零宽断言,不能嵌套或连写;s* 也无法跨行吞掉换行符本身。
-
^s*$只匹配一行内全为空白(含制表符、空格),但不包括它后面的换行符 - 所以
^s*$s*^s*$被解析为“本行空 → 接着匹配本行剩余空白 → 再找下一行开头”,逻辑断裂 - 真正需要的是“本行空 + 换行符 + 下一行空 + 换行符”,即把换行符作为可捕获实体参与匹配
- 这也是为什么必须显式写出
( | | )或用R
批量清理空行前先备份与测试
正则替换空行属于“不可逆高频误操作”,尤其当文档含 Markdown、INI 或代码注释时,空行可能有语义(如段落分隔、section 划分)。
- 务必先用
Ctrl+H打开替换窗口,点击全部替换前,先点查找全部看命中的行号是否合理 - 在小范围手动选中几段空行,勾选
在选中范围内替换测试效果 - 如果文档来自 Git 或协作环境,建议先
Ctrl+S保存副本,再操作原文件 - 注意:Notepad++ 的
R在 v7.9+ 才稳定支持,在旧版本中请坚持用( | | )
连续空行的边界其实很模糊——是删到只剩一个,还是彻底清空?正则能做,但“留几个”得靠你提前想清楚,不然替完还得手调。


















