我一直在研究使用pyparsing的DSL。
我有几个关键字。关于pyparsing关键字类的doumentation可在http://packages.python.org/pyparsing/pyparsing.pyparsing.Keyword-class.html
找到我将它们定义为
this = Keyword("this", caseless=cl)
that = Keyword("that", caseless=cl)
我有一个字典,上面的关键字转化为数字:
helper_dict = {"this":-1, "that":1}
我面临的问题是我无法为它们获得一致的字符串表示。当我尝试str(this)时,它带有引号。因此,如果没有出现关键错误,我就无法真正使用字典。我的意思是当我尝试以下任何一项时,我得到KeyError
:
helper_dict[this]
helper_dict[this.__str__()]
helper_dict[str(this)]
如何获得正确的字符串表示
我查看了关键字的文档和关键字的超类,我无法弄清楚实际上应该使用哪个函数。
答案 0 :(得分:0)
this
和that
不是字符串,它们是使用字符串定义的pyparsing表达式,但它们不是字符串。对于helper_dict
,您已使用字符串“this”和“that”定义了键。在解析包含其定义输入字符串的输入后,您将从this
和that
表达式返回字符串。
以下是一些控制台试验,告诉您这是如何工作的:
>>> from pyparsing import *
>>> this = Keyword("this", caseless=True)
>>> that = Keyword("that", caseless=True)
>>> result = (this|that).parseString("This")
>>> print result
['this']
请注意,无论输入字符串的大小写如何,关键字始终以大写/小写的形式返回一致的标记。 CaselessLite和无壳关键字在其定义字符串的情况下始终返回标记,而不是输入字符串的情况。
>>> print result[0]
this
>>> print type(result[0])
<type 'str'>
解析的数据在ParseResults对象中返回,该对象支持list,dict和object-style寻址。这里第0个元素是一个字符串,字符串“this”。您可以使用此字符串来匹配helper_dict中定义的键“this”:
>>> helper_dict = {"this":1, "that":-1}
>>> helper_dict[result[0]]
1
或者定义一个解析动作来在解析时为你做替换(replaceWith是一个在pyparsing中定义的辅助方法:
>>> this.setParseAction(replaceWith(1))
"this"
>>> print (this | that).parseString("This")[0]
1
- 保罗