正则去重需按重复模式选择策略:一、删连续重复行用^(\s.+\s)$\\n^\\1$;二、删连续重复字符或单词用(.)\1+或(\w+)\1+;三、删全局重复行需awk或Python辅助;四、删单行内重复单词用\b(\w+)\b(?=.*\b\1\b)。

如果您有一段包含重复文本内容的字符串,需要通过正则表达式将其去重并删除冗余项,则需根据重复模式(如连续重复、跨行重复、单词级重复等)选择对应匹配策略。以下是几种可行的正则去重方法:
一、删除连续重复的行
该方法适用于文本中存在完全相同的相邻行,例如日志或列表中连续出现的重复记录。正则通过捕获一行并匹配其后紧邻的相同行来实现删除。
1、在支持PCRE或Perl风格正则的编辑器(如Notepad++、VS Code)中启用“正则表达式”搜索模式。
2、输入匹配模式:^(\s*.+\s*)$\n^\1$
3、将替换内容设为空(即不填任何字符)。
4、点击“全部替换”,仅保留首次出现的行,后续连续重复行被清除。
二、删除连续重复的字符或单词
该方法针对同一行内连续出现的相同字符、数字或单词(如“aa”、“hellohello”),利用反向引用匹配并压缩为单次出现。
1、使用正则模式:(\w+)\1+ 匹配连续重复的单词(如“testtest”→“test”)。
2、或使用:(.)\1+ 匹配连续重复的任意单字符(如“aaabbb”→“ab”)。
3、替换为:$1(即只保留第一个捕获组内容)。
4、执行全局替换,所有连续重复片段被压缩为单例。
三、删除非连续但全局唯一的重复行(需辅助工具)
纯正则无法直接跨多行记忆已出现过的行并删除后续重复,但可在支持扩展功能的环境中结合正则与命令行逻辑实现。此方案依赖sed、awk或Python正则模块的回溯能力。
1、在Linux终端中使用awk命令:awk '!seen[$0]++' input.txt > output.txt
2、若必须用Python正则配合逻辑:读取全文后用re.split('\n')分割,遍历并用集合记录已见行,跳过重复项。
3、正则在此流程中仅用于预处理(如清理首尾空格):^\s+|\s+$ 替换为空以统一比对基准。
四、基于单词边界的重复词删除(单行内)
当目标是清除同一行中重复出现的独立单词(如“apple banana apple”中的第二个“apple”),需确保匹配完整单词而非子串。
1、启用单词边界符号,使用模式:\b(\w+)\b(?=.*\b\1\b)
2、该模式正向查找后续仍存在的相同单词,但不消耗字符(零宽断言)。
3、在支持正向先行断言的引擎中(如Python re、Sublime Text),配合替换逻辑逐个移除后续重复项。
4、实际操作中常分两步:先提取唯一词列表,再按序重建行,避免正则一次性替换引发偏移错乱。










