如何移除文本文件中特定首尾格式的重复片段
问题描述
处理多个TXT文件时遇到正则匹配逻辑错误:
- 文件内容格式:
[TEXT1]File. Title:[TEXT2]____________ [TEXT3]File. Title:[TEXT4]____________[TEXT5],其中TEXT可包含单词、换行符\n、制表符\t、数字、空格、标点 - 需求:移除所有以
File. Title:开头、以____________结尾的片段,最终保留[TEXT1][TEXT3][TEXT5] - 实际示例文本:
xxxxx \n\t, \tFile. Title:\tVersion 2.0\t\n____________ - 当前问题:现有正则会错误匹配第一个
File. Title到最后一个目标片段的全部内容,无法精准移除单个独立片段
错误代码
text = re.sub('File. Title:\s.*\sVersion 2.0','',text, flags = re.DOTALL) text = text.replace("____________", "")
解决方案
问题根源是正则的贪婪匹配:.*在re.DOTALL模式下会匹配尽可能多的内容,导致跨片段抓取。改成非贪婪匹配并直接精准定位目标片段即可解决:
修改后的代码:
import re # 非贪婪匹配单个File. Title:到____________的完整片段 text = re.sub(r'File\. Title:.*?____________', '', text, flags=re.DOTALL)
关键说明
File\. Title::转义.,因为正则中.默认匹配任意字符,这里要匹配字面量的点.*?:非贪婪匹配模式,匹配到第一个____________就停止,不会跨片段抓取内容re.DOTALL:让.可以匹配换行符,确保包含换行、制表符的TEXT2/TEXT4能被正确覆盖- 无需单独调用
replace,正则已将____________包含在匹配范围内直接移除
这样就能精准移除每个独立的目标片段,保留你需要的TEXT1、TEXT3、TEXT5内容。
内容的提问来源于stack exchange,提问作者Fiona Fei
相关产品推荐
相关产品推荐

