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

Pyparsing:如何匹配括号包裹的comma_separated_list

解决PyParsing中逗号分隔列表与大括号匹配的问题

问题核心在于pp.common.comma_separated_list是贪婪匹配模式,会把末尾的}也当作列表内容的一部分,导致后续的}匹配规则找不到目标字符,触发解析异常。同时因为列表项可能包含嵌套括号,需要确保规则只识别外层大括号的边界。

直接修改comma_separated_list的停止条件即可解决,不需要用[1:-1]这种取巧的方式:

import pyparsing as pp

# 复制默认逗号分隔列表规则,设置停止符为右大括号
csv_rule = pp.common.comma_separated_list.copy()
csv_rule.set_stop_on("}")

# 构建外层大括号包裹的完整规则
rule = "{" + csv_rule + "}"

# 测试不同场景
test_inputs = [
    "{something}",
    "{a, b, c}",
    "{item(with, parens), another_item}",
    "{nested{inner}, test_case}"
]

for input_str in test_inputs:
    parsed = rule.parse_string(input_str, parse_all=True)
    print(f"输入: {input_str}")
    print(f"解析结果: {parsed[0]}")
    print("---")

原理说明

  • set_stop_on("}")告诉comma_separated_list遇到右大括号时立即停止匹配,不会吞掉这个终止符,让外层规则能正常匹配}。
  • 原生的comma_separated_list已经支持处理嵌套括号(会忽略括号内部的逗号和终止符),所以列表项里的括号不会干扰外层的边界判断。

内容的提问来源于stack exchange,提问作者Ondrej Sotolar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:27:12