notepad++中匹配行尾空格的正确正则是[ \t]+$,需勾选“正则表达式”且取消勾选“.匹配换行符”,以避免误删换行符或粘连行;全角空格需额外处理,推荐用宏固化清理流程。

正则匹配行尾空格的正确写法
Notepad++ 的正则引擎默认不识别 \s 在行尾对空白字符(尤其是 \r 和 \n)的模糊匹配,直接写 \s*$ 会误删换行符本身,导致所有行粘连。必须明确限定只匹配空格( )和制表符(\t),且不能跨行。
推荐用这个模式:[ \t]+$
-
[ \t]明确只匹配空格或制表符,避开\r/\n -
+表示一个或多个,比*更安全(避免空匹配) -
$锚定到行尾,但注意:在 Notepad++ 中它匹配的是逻辑行尾(即换行符前),不是物理位置
替换操作必须勾选的两个选项
仅写对正则还不够——Notepad++ 默认使用“普通”搜索模式,正则功能是关闭状态。必须手动开启并确认上下文环境。
执行步骤:
- 打开「查找」→「替换」(
Ctrl+H) - 在「搜索模式」区域,**必须勾选
正则表达式**(不勾选等于白写) - **取消勾选
. 匹配换行符**(否则$失效,[ \t]+$可能吞掉整行) - 「查找目标」填
[ \t]+$,「替换为」留空
为什么有时候替换后行尾还剩一个空格?
常见于 Windows 换行符(\r\n)文件中:如果光标停在行末、且该行以 \r\n 结尾,Notepad++ 有时会把 \r 视为“行内”字符,导致 $ 实际锚定在 \r 前,而 \r 后的 \n 不参与匹配——但更常出问题的是人为混入了全角空格或 Unicode 空格(如 \u00A0)。
- 全角空格不会被
[ \t]匹配,需额外加\u00A0或用插件处理 - 若怀疑有不可见 Unicode 空格,先启用「视图」→「显示符号」→「显示所有字符」,观察是否出现
·或¶类标记 - 批量清理 Unicode 空格可临时用
[\u00A0\u1680\u2000-\u200B\u2028\u2029\u202F\u205F\u3000]+,但性能较差,慎用于大文件
更稳妥的自动化方案:用宏录制一键清理
手动输正则容易漏选模式或误操作,尤其频繁处理时。Notepad++ 支持宏录制,可以把「打开替换 → 输入正则 → 执行全部」固化为快捷键。
建议流程:
- 先用上面的
[ \t]+$手动做一次完整替换(确保当前文档没问题) - 点击「宏」→「开始录制」,然后按
Ctrl+H→ 输入正则 → 勾选「正则表达式」→ 点「全部替换」→ 「关闭」 - 再点「宏」→「停止录制」→ 「保存当前宏」,起名如
Trim trailing spaces,绑定快捷键(如Alt+Shift+T) - 之后任何文档,光标一放就能秒清,且不依赖记忆正则
注意:宏会忠实复现你的每一步,所以录制前务必确认「. 匹配换行符」是未勾选状态,否则宏会固化错误配置。











