如何在不排序时移除不含Niveau/stime的重复行并保留首次出现?
解决不含"Niveau"/"stime"行的去重问题(保留首次出现、不排序)
你之前用Notepad+TextFX的方法出问题,大概率是因为隐藏行后正则替换的逻辑没考虑到关键词行的特殊性,或者正则写法在处理大量行时容易出异常。下面给你两个实用的方案,优先推荐用Python脚本(更稳定),也给你适配Notepad的正确正则操作:
方案一:Python脚本处理(最可靠,保证顺序和需求)
5000行的文本量很小,用Python写个简单脚本就能精准处理,完全符合你的要求:
- 打开记事本,把下面的代码复制进去,保存为
remove_duplicates.py(注意后缀是.py):
# 请替换成你的输入/输出文件名 input_file = "你的原文件.txt" output_file = "处理后的文件.txt" # 用来记录已经出现过的非关键词行 seen_lines = set() with open(input_file, 'r', encoding='utf-8') as infile, open(output_file, 'w', encoding='utf-8') as outfile: for line in infile: # 去掉换行符做判断,保留原行的格式写入 line_content = line.rstrip('\n') # 判断是否包含目标关键词 if 'Niveau' in line_content or 'stime' in line_content: outfile.write(line) else: # 非关键词行,只保留首次出现的 if line_content not in seen_lines: seen_lines.add(line_content) outfile.write(line)
- 把你的原文本文件名替换到
input_file里,双击运行这个脚本(需要你电脑装了Python,没装的话去官网装个最新版就行,操作很简单) - 运行完后,
处理后的文件.txt就是你要的结果——所有含"Niveau"/"stime"的行都保留,不含的重复行只留首次出现,顺序完全和原文件一致。
方案二:Notepad++正则替换(不用额外工具)
如果你不想用脚本,也可以用Notepad++的正则功能直接处理,步骤如下:
- 打开你的文本文件,按
Ctrl+H打开替换对话框 - 勾选「正则表达式」和「匹配换行符」(在对话框左下角)
- 「查找目标」输入:
^(?!.*(Niveau|stime))(.*)$\s+(?s)(?<=^\2$\s+)(?:^(?!.*(Niveau|stime))\2$[\r\n]+)+
- 「替换为」留空,然后点击「全部替换」
注意事项:
- 这个正则会匹配所有重复出现的非关键词行,只保留第一次出现的那一行
- 如果替换后还有少量漏网的,可以多点击几次「全部替换」,直到提示“替换0处”
内容的提问来源于stack exchange,提问作者Simo
相关产品推荐
相关产品推荐

