直接搜两个空格再替换成一个空格不行,因无法一次性处理3个、5个等多连续空格,需反复操作;用[ ]+可精准匹配并压缩ascii空格而不误吞制表符或换行符。

为什么直接搜两个空格再替换成一个空格不行
因为文本里可能有 3 个、5 个甚至一长串连续空格,手动替换一次只消掉一对,漏掉的空格会变成新的“重复对”,得反复点多次——这不是正则该干的事。\s+ 看似能匹配,但它会把换行、制表符也卷进来,一不小心就把格式全打乱了。
只匹配连续的普通空格(ASCII 32),不碰 tab 和换行
关键在字符范围要锁死。用 [ ]+ 最稳妥:左中括号和右中括号之间就一个空格字符,加 + 表示“一个或多个”。这样不会误吞 \t 或 \r\n。
操作步骤:
- 打开 Notepad++ 的「查找」→「替换」(
Ctrl+H) - 勾选「正则表达式」(别选「扩展」或「普通」)
- 「查找目标」填:
[ ]+ - 「替换为」填:
(就一个空格) - 点「全部替换」
想保留首尾空格,只压缩中间的怎么办
这时候得用「捕获组 + 零宽断言」避开开头和结尾。但 Notepad++ 的正则引擎(PCRE)对 \K 支持稳定,比 (? 更可靠,也不容易漏掉边界情况。
推荐写法:\S\K[ ]+(?=\S)
说明:
-
\S先匹配一个非空格字符(确保前面不是开头) -
\K把之前匹配的内容“丢弃”,不纳入替换范围 -
[ ]+匹配后面紧跟着的一串空格 -
(?=\S)要求这串空格后面还得跟着非空格字符(确保不是行尾)
替换为仍填: (单个空格)
替换后出现奇怪字符或乱码?检查编码和模式
Notepad++ 默认用 ANSI 打开老文件,但正则在 UTF-8 下行为略有不同。如果替换后看到 Â 之类,大概率是文件是 UTF-8 编码,但当前以 ANSI 模式加载了。
解决方法:
- 菜单栏「编码」→ 确认显示的是
UTF-8或ANSI,和文件真实编码一致 - 如果不确定,先「编码」→「转为 UTF-8 无 BOM」再操作
- 避免在「查找」对话框里勾选「匹配大小写」或「全字匹配」——它们和空格替换无关,反而干扰
真正容易被忽略的,是那个空格本身:你复制进「查找目标」框的,必须是键盘按出来的 ASCII 空格,不能是从网页粘贴来的全角空格或零宽空格——Notepad++ 不会警告,但根本匹配不上。











