为什么我的用例无法在pyparsing中进行有序选择?

|
>>> g = MatchFirst( Literal(\"scoobydoo\"), Literal(\"scooby\") )
>>> g.parseString( \"scooby\" )
pyparsing.ParseException: Expected \"scoobydoo\" (at char 0), (line:1, col:1)
是否因为字符流中已经使用了“ 1”而引发了ParseException并因此解析器无法回溯?我正在为此寻求详细的实现说明。 目前,我认为这是一个错误,因为解析器为什么会短路匹配,因为它没有搜索生产规则中的所有选择。 更新: 似乎
MatchFirst
并不完全等同于exactly3ѭ运算符。为什么呢
>>> g = Literal(\"scoobydoo\") | Literal(\"scooby\")
>>> g.parseString(\"scooby\").asList()
[\'scooby\']
>>> g.parseString(\"scoobydoo\").asList()
[\'scoobydoo\']
    
已邀请:
MatchFirst
(或\'| \')设计短路。要强制检查所有替代项,请使用
Or
(或\'^ \')。
oneOf(\"scooby scoobydoo\")
也将起作用,因为
oneOf
会短路,但仅在重新排列具有前导重叠的替代词之后才可以。     

要回复问题请先登录注册