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

标签 python pyparsing

>>> 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/

相关文章:

python - 如何更改 python pptx 对象的字体大小

python - pyparsing中是否有 "startswith"方法

python - pyparsing 关键字,它是如何工作的?

python - pyparsing如何使用infixNotation来表示iif(cond, if true, if false)

java - 如何从文本文件集合中提取某些值

python - 使用 python 将文件移动到特定目录获取错误文件已存在

python - 导入模块时的奇怪行为

python - NLTK包,未定义标签

python - 尝试解析 Python 中的旧语法

python - 多个鼠标指针?