迭代解析非XML?

时间:2014-12-14 08:15:58

标签: python python-2.7

所以我希望解析一个字符串并将其展平,其中包含可变深度的数字。

以下是字符串的示例:

'(7&(10&(22|25))|(22&25)|(25&(10|22)))|(9&(10&(22|25))|(22&25)|(25&(10|22)))|(33&22&25)'

这意味着,我们在第一级有3种不同的可能性,如此列表所示:

['7&(10&(22|25))|(22&25)|(25&(10|22))', '9&(10&(22|25))|(22&25)|(25&(10|22))', '33&22&25']

此列表中的最后一个选项只能是一个(因为它没有内部级别)。

然而,第一个是变化很大的:所以我将重点关注: ' 7&'表示该级别中的每个元素都有一个7。

然后我们从中提取子级别,我们得到:

['10&(22|25)', '22&25', '25&(10|22)']

所以在这里,索引1是一个死胡同,所以我们对该树的最终输出是' 7& 22& 25'。对于指数0,我们的父母为7& 10&和一个22 | 25的孩子,这意味着分开的树木,所以我们的决赛是7& 10& 22和7& 10& 25,最后,我们有7& 25& 10和7& 25& 22。

我有什么方法可以迭代地做到这一点?我已经有解析器来提取单个级别并提取是否有数字字符加上&符号并提取子级别。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

我认为你想要的不是迭代,而是recursion

假设你有一个解析器功能"解析"可以采用字符串并返回子字符串列表,它可能看起来像这样:

def parse_recursively(string):
    if (string is dead end): # base case
        return [string]

    else:
        children = parse(string) # returns a list of children strings
        rv = list()
        for s in children:
            rv.extend(parse_recursively(s))

        return rv