You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pyparsing实现嵌套Python列表的解析器?

使用Pyparsing解析嵌套花括号结构

问题分析

你当前代码的问题在于:

  • 直接用delimited_list包裹Word(nums)和nested_expr,未正确处理外层花括号,也没将数字字符串转换为整数
  • nested_expr默认会把内部内容当作整体字符串,未拆分逗号分隔的元素

正确实现方案

我们需要定义递归解析规则,同时添加转换动作将字符串数字转为整数:

import pyparsing as pp

# 定义整数解析器,添加转换动作转为int类型
integer = pp.Word(pp.nums).set_parse_action(lambda t: int(t[0]))

# 递归定义元素:可以是整数,或者嵌套的花括号结构
element = pp.Forward()
# 嵌套结构:{ 逗号分隔的元素列表 },用Suppress去除解析结果中的{}
nested_struct = pp.Suppress("{") + pp.delimited_list(element) + pp.Suppress("}")
# 给element赋值,支持递归嵌套
element << (integer | nested_struct)

# 解析测试输入
result = element.parse_string("{1,2,3,{4,5}}", parse_all=True).as_list()
print(result)  # 输出: [1, 2, 3, [4, 5]]

代码解释

  • integer:匹配数字字符串,通过set_parse_action自动转换为Python整数
  • element = pp.Forward():声明前向引用,为递归嵌套结构做准备
  • nested_struct:定义花括号包裹的结构,内部是逗号分隔的element列表,用Suppress过滤掉不需要保留的{和}
  • element << (integer | nested_struct):完成递归规则定义,让元素既可以是整数,也可以是嵌套的花括号结构
  • parse_all=True:确保整个输入字符串被完整解析,避免残留未解析内容

内容的提问来源于stack exchange,提问作者Sergej Herbert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:05:19