扫描具有常规正向lookbehind的嵌套列表

时间:2015-08-13 08:41:45

标签: python regex

我想发布有关嵌套列表的问题。

import re
string = '[5, 42, [19, 3, 5, [7, 7, 5]], 42, 3.14, [6,6,6,7], 2,71, 0,0]'


m = re.findall(r'(?<=\])\]', string)

print(m)
print(len(m))

我试着写一段代码,告诉我有多少&#34;等级&#34;清单有。为了做到这一点,我想让表达式匹配每次2个方括号是一个接一个。但是我必须指定lookbehind应该返回多少个字符。这不是很有用,因为id喜欢让它适用于任何给定的字符串和 &#34;(小于?=] *)]&#34; 不行。 任何人都可以建议解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

使用eval和递归:

>>> depth = lambda l: 1 + max(depth(x) for x in l) if type(l) is list else 0
>>> depth(eval(strng))
3

答案 1 :(得分:0)

这是一个可能计算嵌套级别的解决方案:

strng = '[5, 42, [19, 3, 5, [7, 7, 5]], 42, 3.14, [6,6,6,7], 2,71, 0,0]'
level = 0
cnt = 0
for c in strng:
    if c == '[':
        cnt+=1
    elif c == ']':
        cnt-=1
        if cnt > 0:
            level+=1
print (level)

IDEONE demo。结果:3