^\s*$ 是唯一靠谱的空行匹配正则,因它匹配整行仅含空白字符或为空,不依赖换行符类型、不跨行吞内容,且兼容各种空白字符。

不能直接用 ^$ 或 \n\n 一键删空行——它们会漏掉带空格的“伪空行”,或在 Windows 文件里完全不匹配。
为什么 ^\s*$ 是唯一靠谱的空行匹配正则
它真正匹配的是「整行内容从头到尾只有空白字符(空格、\t、\r)或为空」,不依赖换行符类型,也不跨行吞内容。其他写法全有硬伤:
-
^$:漏掉(四个空格)这种伪空行 -
\n\n:Windows 下换行是\r\n,这个表达式根本匹配不到 -
^\s*\n:把换行符当内容一起删,可能导致两行代码“粘”在一起 -
^s*$(少反斜杠):Sublime 直接不识别,查无结果
删空行必须关掉 . matches newline
右下角那个 ↩ 图标一定不能点亮。一旦启用,^ 和 $ 就只匹配整个文档开头和结尾,不再按行生效——整条规则彻底失效。
操作前务必确认:
- 右下角
.*图标已点亮(启用正则) - 右下角 ↩ 图标未点亮(禁用
. matches newline) - 替换框必须彻底为空——填了
\n或一个空格,等于越删越多
处理末尾空行和特殊空白字符
文件末尾若以 \n\n 结尾,最后一行可能没换行符,^\s*$ 就匹配不到它。这不是 bug,是 Sublime 的行为逻辑。
补救方式:
- 手动:光标移到最后一行开头,按
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)干净删除该行 - 自动:删完后搜
R$(R 是 Sublime 内置跨平台换行符),替换为空,确保文件以单个换行结尾 - 遇到微信粘贴、Excel 导出的文本,可能含全角空格
\u3000、零宽空格\u200B、BOM\uFEFF,需扩展正则为:^[\s\u200b\uFEFF\u00a0\u3000]*$
真正容易被忽略的是:Sublime 不会校验语法。删完之后,得手动 Ctrl+F 搜 \n\n 确认是否还有残留双空行;Python 和 Markdown 文件更要人工扫一眼关键分隔处——压过头可能引发 IndentationError 或渲染异常。

















