notepad++中“移除空白行(包括空白字符)”是7.9+内置最优解,不依赖正则、兼容所有编码与unicode空白;若需精细控制(如保留单空行),须用正则^\s*$\r?\n并预览高亮,避免误删。

Notepad++ 里没有“去除空行里的空格”这种独立操作——因为空行本身不含可见字符,所谓“空行里的空格”,实际是“带空白符的伪空行”。真正要做的,是识别并清除整行仅含空白符(\s)的行,即「移除空白行(包括空白字符)」。
为什么「编辑 → 行操作 → 移除空白行(包括空白字符)」是最优解
这个菜单项是 Notepad++ 7.9+ 内置功能,直接调用底层行处理逻辑,不依赖正则引擎,因此:
- 不挑文件编码(UTF-8、GBK、ANSI、含 BOM 均正常)
- 不误删换行符本身(不会把
\r\n当成内容吃掉) - 能正确识别并清理含空格、
\t、\f、\v甚至 Unicode 空白(如\u00A0)的整行 - 不触发正则模式下常见的锚点失效、跨行匹配异常等问题
如果你在菜单里找不到它,大概率是用了极简版安装包,或插件被禁用。此时别折腾 TextFX —— 它在 UTF-8-BOM 文件中可能吞掉 BOM 头,且早已被官方功能替代。
正则方案 ^\s*$\r?\n 怎么写才不翻车
当内置菜单不可用,或你需要更精细控制(比如保留单个空行、跳过首尾),就得上正则。但网上流传的 ^\s+ 或 ^\s*$ 单独使用都不完整:
-
^\s+只匹配行首有空白的行,漏掉纯\r\n的空行 -
^\s*$能匹配纯空或全空白行,但不包含换行符,替换后可能残留“空行占位”(尤其在 Unix 换行文件里) - 正确写法是:
^\s*$\r?\n——^到$锁定整行内容,\r?\n显式捕获换行,确保真删除 - 必须勾选「正则表达式」模式,不能选「扩展」(
\s和^$在扩展模式下无效) - 不要加
g或m标志 —— Notepad++ 正则引擎不支持
操作前务必先用 Ctrl + F 输入 ^\s*$(同样勾选正则),点「全部高亮显示」,确认哪些行会被命中——这是防止误删的唯一可靠预览方式。
删完发现格式错乱?先看状态栏换行符类型
删空行本身不会改变换行风格,但若原文件混用 \r\n 和 \n,删除后可能出现段落粘连或跳行异常。这不是删除逻辑出错,而是换行符不统一导致的后续解析问题:
- 点 Notepad++ 窗口右下角,看显示的是
DOS、UNIX还是MAC - 若需统一,用「编辑 → 文档格式转换 → 转为 UNIX 格式」(推荐)或「转为 DOS 格式」
- 这步不影响空行是否被删,但关系到复制进终端、Git 提交、Python
readlines()是否出错 - 特别注意:FTP 编辑模式下慎用「全部替换」,网络延迟可能导致操作卡住并丢失状态
想保留部分空行?得改正则逻辑,不是开关选项
「移除空白行(包括空白字符)」是无差别清除,没法设置“最多留两行”。真有这类需求(比如压缩日志中的冗余空行),必须手写正则:
- 把连续多个空行压成一个:
(\r?\n)\s*(\r?\n)→ 替换为$1$2 - 只删带空白但非纯空的行,保留真正空行:
^\s+$(\r?\n)→ 替换为$1 - 所有这类改写,必须关闭「匹配大小写」和「全字匹配」,否则捕获组
$1会失效
业务规则不同,正则就得跟着变。没有万能一锤子方案,也没有图形界面能覆盖所有场景——最稳的永远是先看清你要删的到底是什么,再决定用菜单还是正则。











