如何获取pyparsing关键字类的字符串形式

时间:2012-10-31 13:48:41

标签: pyparsing

我一直在研究使用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)]

如何获得正确的字符串表示

我查看了关键字的文档和关键字的超类,我无法弄清楚实际上应该使用哪个函数。

1 个答案:

答案 0 :(得分:0)

thisthat不是字符串,它们是使用字符串定义的pyparsing表达式,但它们不是字符串。对于helper_dict,您已使用字符串“this”和“that”定义了键。在解析包含其定义输入字符串的输入后,您将从thisthat表达式返回字符串。

以下是一些控制台试验,告诉您这是如何工作的:

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

- 保罗