pyparsing:无法从ParseResults对象获取结果

2024-10-06 23:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> from pyparsing import Word, alphanums, OneOrMore, Optional, Suppress

>>> var = Word(alphanums)
>>> reg = OneOrMore(var('predictors') + Optional(Suppress('+'))) + '~' + OneOrMore(var('covariates') + Optional(Suppress('+')))

>>> string = 'y1 ~ f1 + f2 + f3'
>>> reg.parseString(string)
(['y1', '~', 'f1', 'f2', 'f3'], {'predictors': ['y1'], 'covariates': ['f1', 'f2', 'f3']})

它能够正确地解析事物,但我无法获得predictorscovariates的所有值。它似乎只存储最后一个值:

>>> results = reg.parseString(string)
>>> results.covariates
'f3'
>>> results['covariates']
'f3'

我想以列表的形式获取predictorscovariates中的所有值。你知道为什么会这样吗?你知道吗


Tags: stringvarregoptionalresultswordf2f1
1条回答
网友
1楼 · 发布于 2024-10-06 23:25:05

默认情况下,结果名称使用与Python dict类似的逻辑:如果为同一个键分配了多个值,则只保留最后分配的值。你知道吗

但是,可以重写此行为,具体取决于解析器如何定义结果名称。你知道吗

如果使用完整的expr.setResultsName("XYZ")形式,请添加listAllMatches=True参数。这告诉pyparsing保留一个所有解析值的列表,并将它们作为列表返回。你知道吗

如果使用简捷的expr("XYZ")形式,请在名称的末尾添加'*'expr("XYZ*")。这相当于将listAllMatches设置为True。你知道吗

后面的'*'setResultsName中,用于使用setResultsName的缩写形式:expr("name*")expr.setResultsName("name", listAllMatches=True)。如果您喜欢调用setResultsName,那么不要使用'*'表示法,而是传递listAllMatches参数。你知道吗

相关问题 更多 >