notepad++原生去重必须先排序,否则正则无效;唯一可靠路径是先排序使重复行相邻,再用正则^(.*\r?\n)\1+匹配并替换为\1,且需注意换行符、大小写及模式设置。

Notepad++原生去重必须先排序,否则正则无效
Notepad++ 没有“全局去重”按钮,Remove Consecutive Duplicate Lines 只删物理相邻的重复行,对分散重复完全无感。真正能删掉所有重复行的唯一原生路径,是先让重复内容聚堆——也就是必须先执行排序。不排序就开正则,^(.*\r?\n)\1+ 根本匹配不到任何东西,替换后文本毫无变化,你还以为操作成功了。
- 全选文本(
Ctrl + A)→Edit → Line Operations → Sort Lines Lexicographically Ascending - 排序后,相同内容的行会紧挨在一起,这是后续正则生效的前提
- 如果文本来自 Linux/macOS,换行符是
\n,要把正则里的\r?\n改成\n,否则匹配失败 - 大小写敏感:默认区分大小写,“Apple”和“apple”不会被识别为重复;如需忽略,先统一转成小写(
Edit → Convert Case to → Lower Case)再排序
正则替换要填对模式和参数,否则删错或漏删
^(.*\r?\n)+ 这个表达式看着简单,但三个设置点错一个就白忙活:搜索模式必须是 Regular expression,. matches newline 必须不勾选,替换目标必须填 (不是留空)。
-
^和$在未勾选Matches newline时才按行生效;一旦勾选,^可能跨行匹配,\1会捕获到意外内容,导致整段被删 -
.*在含制表符或首尾空格的行里容易贪婪过头,更稳写法是用[^\r\n]*替代,即^([^\r\n]*\r?\n)\1+ - 替换填
\1是为了只保留第一次出现的那行;填空会把整组都删掉,少一行 - 一次替换可能不彻底,多点几次
Replace All,直到提示“未找到匹配项”为止
想保留原始顺序?加序号锚点是唯一可靠办法
排序天然打乱原始位置,Notepad++ 不支持稳定排序(stable sort),所以“去重+保序”不能靠一步到位。唯一可控方案是在排序前人工加一列递增序号,作为还原锚点。
- 用
Search → Column Mode Edit → Insert Number,起始填1,增量填1,右对齐,给每行最左加序号 - 排序时,整行(含序号)一起动,但排序依据仍是内容,序号只是被动跟随
- 正则去重后,用列编辑(
Alt + 鼠标拖选)框住最左一列数字,按Delete清除 - 漏掉加序号这步,顺序就永远找不回来了;漏掉删序号,结果里会残留一串数字
大文件或需频繁去重,Python Script插件比正则更稳
处理几万行以上文本时,排序+正则容易卡顿,且正则无法跳过首尾空白差异。Python Script 插件能逐行哈希比对,天然支持保序、忽略空白、大小写控制等逻辑,适合长期高频使用。
- 安装插件后重启,新建脚本,粘贴标准去重代码:
lines = editor.getText().splitlines(True)、seen = set()、循环过滤 - 关键细节:
splitlines(True)保留原换行符;line.rstrip('\r\n')可用于忽略行尾换行差异 - 插件依赖 Python 环境,v2.x 版本不兼容 Python 3.12+,装之前确认版本匹配
- 超过 20MB 的文件,建议导出用外部 Python 脚本处理,避免 Notepad++ 内存溢出
\r?\n,或者忘了排序这步直接开正则——看起来点了好几下菜单,结果文件里重复行一个没少。











