7

有什么区别:

foo = TOKEN1 + TOKEN2

foo = Combine(TOKEN1 + TOKEN2)

谢谢。

更新:根据我的实验,它似乎Combine()适用于终端,您试图在其中构建一个匹配的表达式,而 plain+用于非终端。但我不确定。

4

1 回答 1

18

结合有2个效果:

  • 它将所有标记连接成一个字符串

  • 它要求匹配的标记都相邻,没有中间的空格

如果你创建一个表达式

realnum = Word(nums) + "." + Word(nums)

然后realnum.parseString("3.14")将返回 3 个标记的列表:前导 '3'、'.' 和尾随 '14'。但是如果你将它包装在 Combine 中,如下所示:

realnum = Combine(Word(nums) + "." + Word(nums))

然后realnum.parseString("3.14")将返回“3.14”(然后您可以使用解析操作将其转换为浮点数)。并且由于 Combine 抑制了 pyparsing 在标记之间跳过默认空格,因此您不会在“答案是 3。14 是下一个答案”中意外找到“3.14”。

于 2010-05-31T00:30:25.080 回答