我想在Python中创建一个与Python源代码中的一行匹配的正则表达式,并返回一个函数调用列表.
典型的线条如下所示:
something = a.b.method(time.time(), var=1) + q.y(x.m())
Run Code Online (Sandbox Code Playgroud)
结果应该是:
["a.b.method()", "time.time()", "q.y()", "x.m()"]
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
谢谢你的帮助
geo*_*org 11
我不认为正则表达式是最好的方法.改为考虑ast模块,例如:
class ParseCall(ast.NodeVisitor):
def __init__(self):
self.ls = []
def visit_Attribute(self, node):
ast.NodeVisitor.generic_visit(self, node)
self.ls.append(node.attr)
def visit_Name(self, node):
self.ls.append(node.id)
class FindFuncs(ast.NodeVisitor):
def visit_Call(self, node):
p = ParseCall()
p.visit(node.func)
print ".".join(p.ls)
ast.NodeVisitor.generic_visit(self, node)
code = 'something = a.b.method(foo() + xtime.time(), var=1) + q.y(x.m())'
tree = ast.parse(code)
FindFuncs().visit(tree)
Run Code Online (Sandbox Code Playgroud)
结果
a.b.method
foo
xtime.time
q.y
x.m
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2497 次 |
| 最近记录: |