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
相关产品推荐
相关产品推荐

