python - pyparsing:组合多个元素的setResultsName

标签 python pyparsing

这是我正在解析的文本:

x ~ normal(mu, 1)
y ~ normal(mu2, 1)

解析器匹配这些行使用:

model_definition = Group(identifier.setResultsName('random_variable_name') + '~' + expression).setResultsName('model_definition')

// end of line: .setResultsName('model_definition')

问题是当有两个模型定义时,它们没有在 ParseResults 对象中单独命名:

enter image description here

看起来第一个被第二个覆盖了。我命名它们的原因是为了使执行行更容易 - 这样我(希望)不必弄清楚在评估时发生了什么 - 解析器已经标记了所有内容。如何让两个 model_definition 都被标记?如果 model_definition 包含找到的每个模型定义的列表,那就太好了。

以防万一,这里还有一些我的代码:

model_definition = Group(identifier.setResultsName('random_variable_name') + '~' + expression).setResultsName('model_definition')
expression << Or([function_application, number, identifier, list_literal, probability_expression])
statement = Optional(newline) + Or([model_definition, assignment, function_application]) + Optional(newline)
line = OneOrMore('\n').suppress()
comment = Group('#' + SkipTo(newline)).suppress()
program = OneOrMore(Or([line, statement, comment]))
ast = program.parseString(input_string)
return ast

最佳答案

据我所知没有记录,但我在 pyparsing.py 中找到了一些东西:enter image description here

我将 .setResultsName('model_definition') 更改为 .setResultsName('model_definition*'),它们正确列出了!

enter image description here

编辑:已记录,但它是您传递给 setResultsName 的标志:

setResultsName( string, listAllMatches=False ) - name to be given to tokens matching the element; if multiple tokens within a repetition group (such as ZeroOrMore or delimitedList) the default is to return only the last matching token - if listAllMatches is set to True, then a list of matching tokens is returned.

关于python - pyparsing:组合多个元素的setResultsName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37329296/

相关文章:

python - 使用控制台启动程序时无法写入文件

python - pandas groupby 两个相似的列和两个不同的列

python - Pyparsing:快速引用解析器定义正确吗?

python - 带有pyparsing的Markdown语法,正确获取空格

python - 有没有办法检查是否有任何列表元素在字符串中并替换它们?

python - 如何使用 QML 和多个 python 文件构建 PyQt5 项目?

python - 如何将包含 '_' 的 JSON 字段拆分为子对象?

python - 文档的单独部分

python - 过滤 sqlalchemy 连接查询,基于解析的输入构建

python - 标记嵌套表达式但忽略带空格的引用字符串