在这个脚本中,我很难让setResultsName为我工作,即使在尝试模拟给定的示例时也是如此。我查阅了文档,查阅了作者的书,并查看了论坛的例子。我试过几种不同的方法,坦率地说,我有点困惑,不过我肯定我做错了一些傻事,因为我在这方面经验不足。

from pyparsing import *

lineId = Word(nums)
topicString = Word(alphanums+'-'+' '+"'")
expr = Forward()
full_entry = Group(lineId('responsenumber') + expr)

def new_line():
    return '\n' + lineId.responsenumber # <-- here is the line that causes the error

expr << topicString + Optional(nestedExpr(content=delimitedList(expr))) + Optional((Literal(';').setParseAction(new_line) + expr))


for line in input:
    inputParseResults = delimitedList(full_entry).parseString(line).asList()
    print inputParseResults

代码的这一部分试图获取以下输入:
1768    dummy data; things
27483   other things

让它在分号处换行,再次附加lineId,然后重新关联它,就像您在这行看到的那样:
1768    dummy data
1768    things
27483   other things

还有其他代码来处理格式化输出,我没有在这里显示;我的主要障碍是获取换行符+lineId,我想如果我可以让setResultsName工作,我可能会被设置。

最佳答案

将解析后的标记像这样传递到解析操作中,并根据标记访问结果名称,而不是针对解析器表达式:

def new_line(tokens):
    return '\n' + tokens.responsenumber

关于python - Pyparsing setResultsName属性错误:“无此属性”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10358202/

10-11 13:26