如何使用pyparsing一次解析多个元素?

时间:2014-08-26 09:47:02

标签: python parsing pyparsing

我试图用pyparsing编写一个thrift解析器。

我想看的解析结果是一个将元素名称映射到解析的标记的字典。 在定义元素之后,我在每个元素上调用scanString来解析相应的标记,然后从结果中创建一个字典。

但是这需要多次通过源,每个元素一个,例如。一个用于解析常量,一个用于异常,一个用于结构...

是否可以一次解析多个元素,并且仍然可以根据其类型分离令牌?

1 个答案:

答案 0 :(得分:1)

定义一个包含您要查找的所有元素的解析器:

parser = OneOrMore(parserA | parserB | parserC)

如果名称重叠,则将子分组分组,并按名称保留:

parser = OneOrMore(Group(parserA)("A*") | Group(parserB)("B*") | Group(parserC)("C*"))

带有尾随星号的结果名称将保留所有已解析的匹配,而不仅仅是最后一个(关闭'*'并查看解析结果中的差异)。

现在你可以做到:

results = parser.parseString(input)  # or use scanString or searchString
for aresult in results['A']:
    ...
for bresult in results['B']:
    ...