使用Python正则表达式提取文本文件整行未达预期,求解决方案
解决Python正则提取完整记录的问题
我懂你遇到的困扰了——你想从这段没有明确换行的文本里提取出每条完整的业务记录,但正则表达式没给出预期结果对吧?咱们先拆解下这段文本的结构,再针对性地写正则。
首先看你的示例文本结构:每条完整记录都是以数字(1、2、3...)+空格开头,直到下一条记录的开头(同样是数字+空格)或者文本末尾结束。基于这个规律,我们可以用带正向预查的正则来精准匹配每条记录。
具体实现代码
import re data = """Add TTFF LEVERERGE 30 mp -5% Some Text, Some Text 5882950 Abc Lahd Pos Sequence Batch datax datay dataz dataa datab 1 00061680 904834 20.35 REV 177,650 5329,50 Bundled 2-rev 42al/xyz Neon Classic Unit 1300 abc \ 1638\48 2 00012815 55244 815 FWD 164,720 18448,64 UnBundled 2-pag Mathrine Classic straight Tilt 2 xyz / 23,2x23gb 150st/xyz 20 abc/xyz 3 90072815 65944 212 KRT 164,72...""" # 匹配每条完整记录的正则表达式 pattern = r'\d\s+.+?(?=\s+\d\s+|$)' records = re.findall(pattern, data, re.DOTALL) # 打印每条提取到的记录 for idx, record in enumerate(records, 1): print(f"第{idx}条记录:") print(record.strip()) print("-" * 50)
正则表达式解释
\d\s+:匹配记录开头的数字(1、2、3)以及后面跟着的一个或多个空格,确保定位到每条记录的起始点.+?:非贪婪模式匹配任意字符(包括换行符,因为加了re.DOTALL参数),避免一次性匹配到文本末尾(?=\s+\d\s+|$):正向预查条件,匹配到“空格+数字+空格”(下一条记录的开头)或者文本末尾时停止,这样就能精准截取单条完整记录
运行结果
运行上面的代码后,你会得到三条独立的完整记录,分别对应原文本中以1、2、3开头的内容,完全符合提取完整条目的需求。
内容的提问来源于stack exchange,提问作者Laxmikant




