如何移除文本文件中重复的Name-End片段(保留首次出现)
解决重复片段移除问题
我来帮你搞定这个需求!核心思路是先用正则捕获所有Name:到End的片段,然后只保留首次出现的内容,后续重复的直接移除。以下是完整的Python实现代码:
import re # 读取文件内容 with open('testfile.txt', 'r', encoding='utf-8') as input_file: file_content = input_file.read() # 定义正则表达式:匹配从Name:开始到End结束的片段,支持跨多行 fragment_pattern = re.compile(r'Name:.*?End', re.DOTALL) # 用集合记录已经保留过的片段 seen_fragments = set() def handle_duplicates(match_obj): current_fragment = match_obj.group(0) if current_fragment not in seen_fragments: seen_fragments.add(current_fragment) return current_fragment # 首次出现,保留 else: return '' # 重复片段,移除 # 执行替换处理 processed_content = fragment_pattern.sub(handle_duplicates, file_content) # 将处理后的内容写回文件 with open('testfile.txt', 'w', encoding='utf-8') as output_file: output_file.write(processed_content)
关键细节说明:
re.DOTALL标志:默认情况下正则的.不会匹配换行符,加上这个标志后,能正确捕获跨多行的Name:...End片段。- 非贪婪匹配
.*?:确保每个片段都匹配到最近的End,避免出现从第一个Name:直接匹配到最后一个End的错误情况。 - 回调函数去重:利用
re.sub的回调特性,每次匹配到片段时检查是否已经保留过,重复的就替换为空字符串实现移除。
这个方案会完整保留首次出现的目标片段,以及片段前后的所有其他内容,同时精准移除后续重复的目标片段。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

