如何在 PyParsing 中定义数字?

How to define numbers in PyParsing?

我需要在 PyParsing 中为整数定义一个规则,例如:

import pyparsing
plusorminus = pyparsing.Literal('+') | pyparsing.Literal('-')
number = pyparsing.Word(pyparsing.nums) 
hexdecimal = pyparsing.Word(pyparsing.hexnums)
decimal = pyparsing.Combine(pyparsing.Optional(plusorminus) + number)
integer = pyparsing.Combine(pyparsing.Optional(plusorminus) + ((pyparsing.CaselessLiteral('0x') + hexdecimal) |number)).addParseAction(lambda toks: int(toks[0], 0))

问题在于尾随(非数字),例如数字和字母:

integer.parseString('123a').pprint()

return 不是错误吗?

调用parsestring时,给它参数parseAll=True。因此

integer.parseString('123a', parseAll=True).pprint()

抛出异常。

来自pyparsing documentation如果您希望语法要求成功解析整个输入字符串,则将 parseAll 设置为 True。