PyParsing:Combine() 的作用是什么?
和有什么不一样?
foo = TOKEN1 + TOKEN2
:和
foo = Combine(TOKEN1 + TOKEN2)
谢谢
更新:根据我的实验,Combine()
似乎适用于终端,您尝试构建一个表达式来匹配,而普通的 +
用于非终结符。但我不确定。
What is the difference between:
foo = TOKEN1 + TOKEN2
and
foo = Combine(TOKEN1 + TOKEN2)
Thanks.
UPDATE: Based on my experimentation, it seems like Combine()
is for terminals, where you're trying to build an expression to match on, whereas plain +
is for non-terminals. But I'm not sure.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
组合有 2 个效果:
它将所有标记连接成一个字符串
它要求匹配的标记全部相邻且没有中间空格
如果您创建类似的表达式
,则
realnum.parseString("3.14")
将返回 3 个标记的列表:前导 '3'、 '.',以及尾随的'14'。但是,如果您将其包装在合并中,如下所示:那么
realnum.parseString("3.14")
将返回“3.14”(然后您可以使用解析操作将其转换为浮点数)。而且由于 Combine 会抑制 pyparsing 在标记之间跳过的默认空格,因此您不会意外地在“答案是 3。14 是下一个答案”中找到“3.14”。Combine has 2 effects:
it concatenates all the tokens into a single string
it requires the matching tokens to all be adjacent with no intervening whitespace
If you create an expression like
Then
realnum.parseString("3.14")
will return a list of 3 tokens: the leading '3', the '.', and the trailing '14'. But if you wrap this in Combine, as in:then
realnum.parseString("3.14")
will return '3.14' (which you could then convert to a float using a parse action). And since Combine suppresses pyparsing's default whitespace skipping between tokens, you won't accidentally find "3.14" in "The answer is 3. 14 is the next answer."