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

pyparsing单独解析正常,组合解析抛出ParseException问题求助

pyparsing组合解析失败问题解决

问题原因

单独解析feature或user时,pyparsing默认仅匹配到第一个符合规则的片段就返回,忽略后续未匹配的内容(比如features_str里的floating license行)。但组合解析时,feature + OneOrMore(user)要求解析完feature后立刻匹配user规则,此时后续的floating license行不符合user的结构,直接触发解析错误。

解决方案

方案1:修改feature规则,处理无关行

直接在feature规则末尾添加对floating license这类无关内容的跳过逻辑,确保解析完feature相关内容后,自动跳过后续无关行,为匹配user规则扫清障碍:

feature = (
    QuotedString(quote_char='"').setResultsName("name")
    + Word(alphanums + ".").setResultsName("version")
    + Suppress(", vendor:")
    + Word(alphas).setResultsName("vendor")
    + Suppress(", expiry: ")
    + Word(nums)
    + Suppress("-")
    + Word(alphas)
    + Suppress("-")
    + Word(nums)
    + Suppress("vendor_string: ")
    + Word(alphanums + ":")
    + Word(alphas).setResultsName("type")
    + Suppress(SkipTo(LineEnd()))  # 跳过当前行剩余内容
    + Suppress(Optional(Word(alphas) + Word(alphas)))  # 跳过"floating license"行
)

方案2:在组合表达式中跳过中间无关内容

如果不想修改原有feature规则,可以在组合表达式里加入跳过逻辑,跳过feature和user之间的无关内容:

expr = feature + Suppress(SkipTo(user)) + OneOrMore(user)

额外建议

测试解析时建议添加parse_all=True参数,强制解析整个输入字符串,避免忽略未处理内容导致的隐藏问题:

expr.parse_string(features_and_users, parse_all=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:38:12