在这个脚本中,我很难让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/