>> g.parseString( "scooby" ) pyparsin-6ren">
gpt4 book ai didi

python - 为什么 pyparsing 中的有序选择对于我的用例失败?

转载 作者:行者123 更新时间:2023-12-01 06:11:16 26 4
gpt4 key购买 nike

>>> g = MatchFirst( Literal("scoobydoo"), Literal("scooby") )
>>> g.parseString( "scooby" )
pyparsing.ParseException: Expected "scoobydoo" (at char 0), (line:1, col:1)

是否因为 scooby 已在字符流中被消耗而引发 ParseException,因此解析器无法回溯?我正在寻找详细的实现说明。

目前,我认为这是一个错误,因为解析器为什么会短路匹配,因为它没有搜索生产规则中的所有选择。

更新:

似乎 MatchFirst 并不完全等同于 | 运算符。为什么?

>>> g = Literal("scoobydoo") | Literal("scooby")
>>> g.parseString("scooby").asList()
['scooby']
>>> g.parseString("scoobydoo").asList()
['scoobydoo']

最佳答案

MatchFirst(或“|”)按设计进行短路。要强制检查所有替代项,请使用 Or(或“^”)。 oneOf("scooby scoobydoo") 也可以工作,因为 oneOf 会短路,但只有在重新排列具有前导重叠的替代单词之后。

关于python - 为什么 pyparsing 中的有序选择对于我的用例失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5777727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com