使用欧芹返回带有“or”语法的空列表

2024-03-28 13:54:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用欧芹来匹配一个词。我所使用的语法只有在我为泛型词制定规则时才起作用。但是,我想知道为什么它不能像Allen Short的演示和示例代码这里(http://bit.ly/1025Qxo)和这里(http://bit.ly/17wzUYg)所显示的那样工作。在

在他的守则中,他有:

rule = (expr1 -> returnval) | -> []

但我唯一的办法是:

^{2}$

我的代码是:

import parsley

grammar = r"""

myword = "hello"
myrule = (myword:word -> word) | -> []
"""

MyPar = parsley.makeGrammar(grammar,{})
print MyPar("hello").myrule() # works, returns myword
print MyPar("bye").myrule() # doesn't work, throws exception

我让它发挥作用的唯一方法是使用内置的'letter'变量为一个通用单词字符串制定一个规则。在

import parsley

grammar = r"""

myword = "hello"
anyword = <letter+>
myrule = (myword:word -> word) | anyword -> []
"""

MyPar = parsley.makeGrammar(grammar,{})
print MyPar("hello").myrule() # works
print MyPar("bye").myrule() # works, returns empty list

任何帮助都将不胜感激。非常感谢。在

保罗


Tags: 代码importhttphello规则lybitword
1条回答
网友
1楼 · 发布于 2024-03-28 13:54:29

我想你误解了规则应该符合什么。在

myrule = (myword:word -> word) | -> []

这将尝试匹配两个选项中的任何一个:

  1. (myword:word -> word)尝试匹配myword并返回它

  2. -> []尝试匹配nothing(一个空字符串,不是任何内容),并返回一个空列表

所以你得到的行为是意料之中的。
如果你想匹配任何一个单词,我想你的第二个代码就是这样做的。在

相关问题 更多 >