结论:用 $ 匹配行尾 + 勾选「正则表达式」+ 关闭「匹配换行符」是最稳方案;其他方法易漏行、多空行或兼容性差,因 notepad++ 中 $ 行为受这两开关控制,且需先清理行尾空白、区分空行处理,并检查自动换行、列编辑模式及编码问题。

直接说结论:用 $ 匹配行尾 + 勾选「正则表达式」+ 关闭「匹配换行符」,是最稳、最通用的方案。其他方法要么漏行,要么多空行,要么只对部分文件生效。
为什么 $ 替换后有的行没加,或者冒出空行?
根本原因是 Notepad++ 对 $ 的行为受两个开关控制,而不是你写的正则本身错没错:
- 必须勾选「正则表达式」——否则
$就是普通字符,什么也不匹配 - 必须取消勾选「匹配换行符」——一旦勾上,
$只匹配\r\n或\n前那个位置;你填;,结果就变成;\r\n,视觉上像多了一行 - 文件混用换行符(比如 Git 拉下来的
\n和本地编辑存的\r\n)时,$在默认设置下能识别,但只要「匹配换行符」一开,就只认当前光标所在行的换行类型,部分行直接被跳过
加 ; 前为什么要先清掉行尾空白?
因为原始代码行末可能已有空格或 Tab,比如 int x = 1 (末尾三个空格)。如果你直接 $ → ;,结果就是 int x = 1 ; —— 看似没问题,但团队规范常要求“分号前无空格”。更麻烦的是,如果有人手动加过 ; 但忘了删空格,就会变成 int x = 1 ; ;。
稳妥做法分两步:
- 第一步:查找
\s*$,替换为空 → 吃掉所有行尾空白(\s包含空格、Tab、\r、\n,*是贪婪匹配,一次清干净) - 第二步:查找
$,替换为;→ 此时行尾干干净净,加出来的;紧贴代码
只想给非空行加分号,正则怎么写?
空行 = 全是换行符(不含可见字符)。用 ^.*$ 而不是 ^.+$,因为后者会漏掉单字符行(比如只有 a 的行)。
操作步骤:
- 确保「. 匹配换行符」未勾选(否则
.会吞掉换行符,整篇变一行) - 查找内容填:
^.*$ - 替换为填:
$0;($0表示原行全部内容,;追加在末尾) - 如果还要跳过纯空白行(含空格、Tab),可用
^[^\r\n]*\S[^\r\n]*$,但日常建议先用「编辑 → 行操作 → 删除空行」手动清理更直观
加完发现格式乱了,先别调正则,检查这三处
90% 的“错乱”不是正则写错了,而是编辑器状态干扰了实际替换范围:
- 关闭「视图 → 自动换行」——长行被折行后,
$只在物理行尾生效,视觉上像漏了几行 - 确认没处于「列编辑模式」——按住
Alt拖选会激活它,状态栏有提示,此时替换只作用于列块区域 - 替换前用「搜索 → 在文档中查找」输入
$测试:如果只高亮几行,说明文件里有 BOM、混合编码(比如 GBK 文件里夹了 UTF-8 BOM)或控制字符,这时候$失效,得先转成 UTF-8 无 BOM 再试
真正容易被忽略的点是:Notepad++ 不区分“逻辑行尾”和“物理行尾”,它只认换行符位置。所以哪怕你代码缩进再整齐,只要某行末尾多了一个不可见的 \r 或零宽字符,$ 就可能失效——这种问题不会报错,只会静默漏掉。处理前先「视图 → 显示符号 → 显示所有字符」,一眼就能看到异常。











