Python中如何从结构化文本中提取包含指定词string1的完整句子
问题原因
你之前使用的正则存在核心错误:原始文本中并未使用英文句号.作为记录分隔符,[^.]无法正确识别完整记录的前后边界,只会匹配非句号字符,因此丢失了目标记录开头的HEAD前缀内容。
解决方案
你的所有完整记录均以HEAD作为起始标记,因此可以使用否定式正向预查限制匹配范围不会跨到下一条记录,正则表达式如下:
HEAD(?:(?!HEAD).)*string1(?:(?!HEAD).)*
规则说明
HEAD:定位完整记录的起始位置(?:(?!HEAD).)*:匹配任意单个字符,仅当该字符的后续位置不是HEAD时才继续匹配,确保不会读取到下一条记录的内容string1:匹配你指定的目标关键词- 后半段
(?:(?!HEAD).)*:继续匹配关键词之后的剩余内容,直到遇到下一条记录的起始标记HEAD或文本结束
调用示例(Python)
import re # 原始文本 raw_text = "HEAD,Content,11005,{A:1,json:{B:0,C:5,D:-1,E:false,F:Failure},suffix:_A}DC0DHEAD,Content,11005,{A:1,json:{BC:true,DE:2,FG:0,HI:0,JK:0,string1:Error},suffix:_A}D646HEAD,Content,11005,{A:1,json:{Z:{Y:false,X:0,Q:1},suffix:}3AA8" # 匹配规则 pattern = r"HEAD(?:(?!HEAD).)*string1(?:(?!HEAD).)*" # 执行匹配 match_result = re.search(pattern, raw_text) if match_result: print(match_result.group())
输出结果
HEAD,Content,11005,{A:1,json:{BC:true,DE:2,FG:0,HI:0,JK:0,string1:Error},suffix:_A}D646
内容的提问来源于stack exchange,提问作者Crazy
相关产品推荐
相关产品推荐

