Python正则如何匹配带xyz前缀的括号内封装的JSON内容?
匹配失败原因
- 默认状态下正则表达式的
.元字符不会匹配换行符,若你的JSON内容存在换行,.*?会在碰到第一个换行时终止匹配,无法匹配到后续的),所以返回空结果。 - 就算JSON是单行结构,若JSON字符串内部存在
)字符,惰性匹配也会提前终止,导致提取的JSON内容不完整。
解决方法
方法一:正则适配(适合结构简单的场景)
给正则添加re.S(等价于re.DOTALL)标志位,让.可以匹配换行符,同时通过捕获组直接提取括号内的JSON内容:
import re json_str_list = re.findall(r'xyz\((.*?)\)', text_file, flags=re.S)
方法二:按行定位(稳定性更高)
因为你的数据有固定的前置行规则,按行遍历定位完全避免正则匹配的异常问题,适配所有合法JSON场景:
import json parsed_data = [] lines = text_file.splitlines() for idx in range(len(lines) - 1): if lines[idx].strip() == "abcdefg": target_line = lines[idx + 1].strip() if target_line.startswith("xyz(") and target_line.endswith(")"): json_str = target_line[4:-1] parsed_data.append(json.loads(json_str))
内容的提问来源于stack exchange,提问作者always_confused
相关产品推荐
相关产品推荐

