如何限定正则仅提取RID: RSS-130及ACQT后对应记录的指定内容?
正则限定RID范围提取指定节点下内容方案
核心思路
先锁定RID: RSS-130的专属记录块,再在块内匹配ACQT节点后的目标字段,通过非贪婪匹配限制范围,避免跨记录匹配。
适配后正则规则
需要搭配单行匹配模式(让.可匹配换行符)使用:
RID:\s+RSS-130.*?PROC DATE:\s*(\w+).*?ACQT.*?T PUR\s*([0-9,]+)\s*([0-9,]+)
规则说明
- 开头
RID:\s+RSS-130:限定仅匹配目标RID的记录 .*?:非贪婪匹配任意字符,确保匹配范围不会超出当前记录块,不会命中后续其他RID的内容- 中间加入
ACQT关键字校验:确保只提取ACQT节点之后出现的T PUR数值 - 三个捕获组分别对应目标内容:PROC DATE后的日期值、T PUR行第一个数值、T PUR行第二个数值
Python实现示例
import re # 读取目标文本文件 with open("你的结构化文件路径.txt", "r", encoding="utf-8") as f: text_content = f.read() # 编译正则,开启re.S(单行匹配模式) extract_pattern = re.compile( r"RID:\s+RSS-130.*?PROC DATE:\s*(\w+).*?ACQT.*?T PUR\s*([0-9,]+)\s*([0-9,]+)", flags=re.S ) # 提取结果并格式化 result = extract_pattern.findall(text_content) format_result = [f"({';'.join(item)})" for item in result] # 输出结果:[(15SEP21;120;12,263,518)] print(format_result)
优化可选方案
如果你的文件里单条RID记录的结束标识是固定的(比如下一个RID:开头),也可以在正则末尾加前瞻断言进一步缩小匹配范围,避免极端场景下的跨记录匹配:
RID:\s+RSS-130.*?PROC DATE:\s*(\w+).*?ACQT.*?T PUR\s*([0-9,]+)\s*([0-9,]+).*?(?=\nRID:|\Z)
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

