notepad++无批量去重按钮,仅三类可行方案:排序+正则(失序)、加序号锚点再排序(保序繁琐)、python script插件(真保序可定制);remove consecutive duplicate lines仅删相邻重复行;正则^(.*\r?\n)\1+易因模式、换行符、.匹配换行等设置失效;保序需人工加序号再排序;大文件或需忽略空白/大小写时推荐python script插件。

Notepad++ 没有“批量去重”按钮,所谓“一键删除所有重复行”纯属误解。真正能落地的只有三类路径:排序+正则(顺序丢失)、加序号锚点再排序(保序但繁琐)、Python Script 插件(真保序+可定制)。选哪条,取决于你是否允许打乱原始行序、文件大小、以及是否接受插件依赖。
为什么 Remove Consecutive Duplicate Lines 总是删不干净
这个命令藏在 Edit → Line Operations → Remove Consecutive Duplicate Lines,但它只处理物理上紧挨着的重复行。比如文本是:
apple banana apple apple
它只会删掉最后两个 apple,前面那个 apple 因为被 banana 隔开,完全不受影响。
常见误用场景:
- 没先排序就直接点它,结果重复行分散,几乎无效
- 行尾有不可见空格或制表符,导致表面相同实则不等(
"apple "≠"apple") - 大小写混用(
"Apple"和"apple"被视为不同)
^(.*\r?\n)\1+ 正则去重失效的三个硬坑
这是排序后去重的核心表达式,但极易因设置错位而完全不生效:
-
Search Mode必须选Regular expression,选成Normal或Extended会导致\1失效 - 换行符类型要匹配:
Windows文本用\r?\n,Linux/macOS文本必须改成\n,否则正则根本找不到换行位置 -
. matches newline一定不能勾选——一旦勾选,^和$会跨行匹配,\1可能捕获到意外内容,整段被删 - 更稳写法:把
.*换成[^\r\n]*,避免贪婪匹配吞掉行尾空格或制表符
想保留原始顺序?必须加序号锚点再排序
Notepad++ 不支持稳定排序(stable sort),原生排序必然打乱顺序。唯一可靠保序方案是人工加锚点:
- 用
Search → Column Mode Edit → Insert Number,起始值填1,增量填1,给每行最左插入序号(如1. apple) - 全选 →
Edit → Line Operations → Sort Lines Lexicographically Ascending(此时按内容排序,序号随行移动) - 执行正则
^(.*\r?\n)\1+→\1,只删内容重复、序号不同的后续行 - 最后用列编辑(
Alt + 鼠标拖选)框住左侧序号列(含小数点和空格),按Delete清除
漏掉加序号这步,原始顺序就永远找不回来了;漏掉删序号,结果里会残留一串数字。
大文件或需忽略空白/大小写?用 Python Script 插件
当文件超大(>10MB)、或需跳过首尾空白、统一大小写时,正则+排序容易卡顿且逻辑僵硬。Python 脚本逐行读取,用 set() 记录已见内容,天然保序、可控性强:
- 安装
Python Script插件(Plugins → Plugins Admin → 搜索并安装) - 脚本示例(运行前先全选或确保光标在开头):
unique_lines = set()
for line in notepad.getCurrentLines():
stripped = line.strip() # 忽略首尾空白
if stripped and stripped not in unique_lines:
unique_lines.add(stripped)
notepad.addText(stripped + '\n')
注意:该脚本输出到新文档,不覆盖原文件;若需保留原始空白或换行风格,strip() 要换成更细粒度的清洗逻辑。
复杂点在于——所有方案都绕不开“重复”的定义:是整行严格一致?还是忽略空格和大小写?这个判断必须由你明确,Notepad++ 不会替你做决定。稍有偏差,去重结果就可能漏掉关键行或误删有效内容。











