Python如何解析包含多个列表的字符串并读取指定元素
问题说明
现有待解析字符串如下:
test_str = "['A', 'B', 'C'] ['D', 'E', 'F']"
尝试使用json.load、ast.literal_eval直接解析均失败,需要实现快速解析,满足如下调用效果:
parse = test_str.some_function() print(parse[0][2])
预期输出:C
实现方案
失败原因说明
json相关解析方法失效:JSON规范要求字符串必须使用双引号,且待解析内容是两个数组直接拼接,既不符合JSON语法要求,也不存在合法的整体结构。- 直接调用
ast.literal_eval失效:原字符串是两个独立的Python列表字面量连续拼接,不属于单个合法的Python字面量结构,解释器无法直接识别。
最简实现
只需要补全字符串缺失的结构分隔符和外层包裹,就可以直接用ast.literal_eval一次性解析,无代码注入风险,完全适配当前场景:
import ast test_str = "['A', 'B', 'C'] ['D', 'E', 'F']" # 补全列表间分隔符,外层套列表构造合法二维列表字面量 parse = ast.literal_eval(f"[{test_str.replace('] [', '], [')}]") print(parse[0][2]) # 输出结果 C
如果列表之间存在不定数量的空格、换行分隔,可以用正则做兼容替换,适配更多格式:
import ast import re test_str = "['A', 'B', 'C'] ['D', 'E', 'F']" # 匹配右括号和左括号之间的任意空白字符做替换 parse = ast.literal_eval(f"[{re.sub(r'\]\s*\[', '], [', test_str)}]")
该方法对3个及以上连续拼接的列表同样有效,替换后均可直接解析为标准二维列表。
内容的提问来源于stack exchange,提问作者rookie
相关产品推荐
相关产品推荐

