如何用正则提取RID: RSS-130区块下AQT TEST后的指定数据
正则调整方案
单条正则一次性捕获方案
核心逻辑是先锁定目标区块范围,再跳过AQT TEST之前的内容,最后一次性捕获所有需要的字段,匹配时需要开启单行匹配模式(让.可以识别换行符):
# 正则规则 target_regex = r"RID: RSS-130.*?AQT TEST.*?PROC DATE:\s+(\w+).*?T PURC\s*(\d*)\s*([-.,0-9]+)\s*(\d+)\s*(\w+)"
调用示例:
import re # 替换为你的原始文本内容 raw_text = "你的原始文本内容" result = re.findall(target_regex, raw_text, flags=re.S) print(result) # 输出为你期望的 [(19SEP21,80,8,243,518RR)]
拆分匹配方案(兼容原有正则)
如果要保留你原来写的两条正则逻辑,可以先截取目标区间再单独匹配各字段,后续调整规则更灵活:
import re raw_text = "你的原始文本内容" # 第一步:提取RID: RSS-130区块中AQT TEST之后的内容 section = re.search(r"RID: RSS-130.*?AQT TEST(.*?)(?=RID:|$)", raw_text, flags=re.S).group(1) # 第二步:在截取的区间内匹配各字段 proc_date = re.search(r"PROC DATE:\s+(\w+)", section).group(1) t_purc_res = re.findall(r"T PURC\s*(\d*)\s*([-.,0-9]+)", section) # 补充匹配剩余的243、518RR字段,自行拼接成目标元组即可
如果原始文本中字段之间的分隔符(空格、制表符等)有差异,可以把正则中的\s+替换为\s*适配多空白字符的场景。
内容的提问来源于stack exchange,提问作者MARK
相关产品推荐
相关产品推荐

