Notepad++如何用正则忽略标点空格删除模糊重复行
Notepad++ 模糊去重实现方案
纯正则表达式无法直接完成该需求:这类去重需要先对每行做归一化处理(剔除标点、空格,统一大小写)再比对重复值,Notepad++自带的查找替换功能不支持跨行的键值状态记录,推荐用内置插件实现,操作步骤如下:
插件法(推荐,10秒完成处理)
- 打开Notepad++,顶部菜单栏依次选择「插件」→「插件管理」,搜索
Python Script,勾选对应选项后点击安装,等待软件重启完成插件加载。 - 重启后点击顶部菜单「插件」→「Python Script」→「New Script」,给脚本自定义命名(比如
fuzzy_dedup.py)后保存。 - 将以下代码粘贴到脚本编辑窗口,保存后关闭编辑页:
import re editor.beginUndoAction() all_lines = editor.getDocument().splitlines() seen_norm_key = set() keep_content = [] for line in all_lines: # 归一化规则:删除所有非字母数字字符,统一转小写 norm_key = re.sub(r'[^a-zA-Z0-9]', '', line).lower() # 空行直接保留 if not norm_key: keep_content.append(line) continue # 归一化结果未出现过则保留该行 if norm_key not in seen_norm_key: seen_norm_key.add(norm_key) keep_content.append(line) # 替换全文为去重后的内容 editor.setText('\r\n'.join(keep_content)) editor.endUndoAction()
- 打开需要处理的目标txt文件,点击「插件」→「Python Script」→「Scripts」,选择刚才保存的脚本,一键执行即可完成去重。
方案说明
- 去重逻辑完全匹配需求:自动忽略所有标点、空格、大小写差异,只要行内的字母、数字序列完全一致就判定为重复,每组重复行默认保留最先出现的1条,符合「保留任意一条即可」的要求。如果需要固定保留特定位置的重复行,只需要调整遍历、键值记录的逻辑即可,核心归一化规则不需要改动。
- 原文件中的空行会完整保留,不会被误删。
- 所有操作支持一键撤销,如果结果不符合预期,按
Ctrl+Z即可回退到原始文件状态。
无插件替代方案(操作繁琐,仅应急使用)
如果不想安装插件,可以通过多步编辑手动实现:
- 用列编辑模式在所有行的行首插入递增数字序号,给每行做唯一标识。
- 复制全文到新标签页做归一化处理:
- 查找内容填
[^a-zA-Z0-9\r\n],替换为空,勾选「正则表达式」后执行全部替换,剔除所有标点、空格。 - 查找内容填
[A-Z],替换为\L$0,勾选「正则表达式」后执行全部替换,统一转小写。
- 查找内容填
- 将原文件行和归一化后的副本行按行号一一对应合并,按归一化后的内容去重,再按原行号排序恢复原文顺序,删除辅助的序号列、归一化列即可。
*该方法步骤多容易出现匹配错误,处理大文件效率极低,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者user2311056
相关产品推荐
相关产品推荐

