Python 定义PyParsing字段名的简写

Python 定义PyParsing字段名的简写,python,pyparsing,Python,Pyparsing,我有几个pyparsing,定义如下: field = Word(alphas + "_").setName("field") 这真的没有速记吗 此外,这似乎不起作用,expression.parseString()返回的字典总是空的。field=Word(alphas+“”)(“field”) 似乎有效。您混淆了setName和setResultsNamesetName为表达式指定名称,以便异常消息更有意义。比较: >>> integer1 = Word(nums) >

我有几个pyparsing,定义如下:

field = Word(alphas + "_").setName("field")
这真的没有速记吗

此外,这似乎不起作用,expression.parseString()返回的字典总是空的。

field=Word(alphas+“”)(“field”)


似乎有效。

您混淆了
setName
setResultsName
setName
为表达式指定名称,以便异常消息更有意义。比较:

>>> integer1 = Word(nums)
>>> integer1.parseString('x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python26\lib\site-packages\pyparsing-1.5.6-py2.6.egg\pyparsing.py", line 1032, in parseString
    raise exc
pyparsing.ParseException: Expected W:(0123...) (at char 0), (line:1, col:1)
正如@Kimvais所提到的,
setResultsName
有一个快捷方式:

>>> expr = integer('age') + integer('credits')

还要注意,
setResultsName
返回表达式的副本-这是多次使用同一表达式和不同名称的唯一方法。

这是一个常见的请求,但这是Python的问题,而不是pyparsing的问题<代码>表达式=单词(nums);number=expr现在number和expr都指向同一个表达式。现在执行
expr.parseString('123')
该对象不知道它自己的名称,尝试遍历
locals()
以找到它将同时给出
expr
number
>>> expr = integer.setResultsName('age') + integer.setResultsName('credits')
>>> data = expr.parseString('20 110')
>>> print data.dump()
['20', '110']
- age: 20
- credits: 110
>>> expr = integer('age') + integer('credits')