gpt4 book ai didi

python - 在pyparsing中,如何分配一个 "no match"键值?

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:50 28 4
gpt4 key购买 nike

我想将“pyparsing”解析结果作为字典输出,而无需进行后处理。为此,我需要定义自己的键字符串。以下是我能想到的最好的结果。

要解析的行:

%ADD22C,0.35X*%

代码:

import pyparsing as pyp

floatnum = pyp.Regex(r'([\d\.]+)')
comma = pyp.Literal(',').suppress()

cmd_app_def = pyp.Literal('AD').setParseAction(pyp.replaceWith('aperture-definition'))

cmd_app_def_opt_circ = pyp.Group(pyp.Literal('C') +
comma).setParseAction(pyp.replaceWith('circle'))

circular_apperture = pyp.Group(cmd_app_def_opt_circ +
pyp.Group(pyp.Empty().setParseAction(pyp.replaceWith('diameter')) + floatnum) +
pyp.Literal('X').suppress())

<the grammar for the entire line>

结果是:

['aperture-definition', '20', ['circle', ['diameter', '0.35']]]

我认为这里的 hack 是

pyp.Empty().setParseAction(pyp.replaceWith('diameter'))

它总是匹配并且是空的,但随后我将我想要的键名分配给它。

这是最好的方法吗?我是否在滥用 pyparsing 来做一些它不应该做的事情?

最佳答案

如果你想将你的floatnum命名为“diameter”,你可以使用named results :

cmd_app_def_opt_circ = pyp.Group(pyp.Literal('C') +
comma)("circle")


circular_apperture = pyp.Group(cmd_app_def_opt_circ +
pyp.Group(floatnum)("diameter") +
pyp.Literal('X').suppress())

这样,每次解析在 circular_appertur 上下文中遇到 floatnum 时,这个结果就被命名为 diameter。此外,如上所述,您可以用相同的方式命名 circle。这对你有用吗?

关于python - 在pyparsing中,如何分配一个 "no match"键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19338063/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com