python - 从python代码的字符串中提取所有变量(正规表达式或AST )

我想查找并提取包含python代码的字符串中的所有变量,我只想提取带下标的变量。

例如从以下字符串中:


code = 'foo + bar[1] + baz[1:10:var1[2+1]] + qux[[1,2,int(var2)]] + bob[len("foobar")] + func() + func2 (var3[0])'



提取:foo,bar[1],baz[1:10:var1[2 1]],var1[2 1],qux[[1,2,int(var2)]],var2,bob[len("foobar")],var3[0] ,请注意,某些变量可能是"嵌套",例如,从baz[1:10:var1[2+1]]中,我想提取baz[1:10:var1[2+1]]var1[2+1]

这是我迄今实现的:


regex = r'[_a-zA-Z]w*s*([.*])?'


for match in re.finditer(regex, code):


 print(match)



另一种解决方案是使用AST,扩展ast.NodeVisitor,并实现visit_Namevisit_Subscript方法,但是,这是不工作的,因为visit_Name也被调用函数。

时间:

正则表达式不足以执行此操作。

这个问题被问得很多

如果你真的必须解析代码字符串,从技术上来说AST可以工作,但是我不知道有一个库可以帮助你。你最好是尝试构建一个递归函数来进行解析。

...