我是 Pyparsing 的新手(对 Python 也很陌生)。我试图将我的问题简化为最简单的形式,以说明出了什么问题(到了我可能根本不需要 Pyparsing 的地步!)
假设我有一个由字母和数字组成的字符串,例如“b7 z4 a2 de c3”。总是有一个字母,但数字是可选的。我想把它解析成它的单个元素,然后处理它们,但是如果有一个没有数字的裸字母,那么更改它以便它后面有“默认”数字 1 会很方便。然后我可以以一致的方式处理每个元素。我想我可以用 setparseAction 来做到这一点,如下所示:
from pyparsing import *
teststring = "a2 b5 c9 d e z"
expected_letter = Word("ABCDEFGabcdefgzZxy", exact=1)
expected_number = Word(nums)
letter_and_number = expected_letter + expected_number
bare_letter = expected_letter
bare_letter.setParseAction( lambda s,l,t: t.append("1") )
elements = letter_and_number | bare_letter
line = OneOrMore(elements)
print line.parseString(teststring)
不幸的是, t.append() 没有达到我的预期,即在已解析的标记列表中添加一个“1”。相反,我收到一个错误:TypeError: 'str' object is not callable。
在这里,我可能真的很厚,但是你们中的一位专家能否让我直截了当。
谢谢
史蒂夫