我正在尝试使用REGEX提取文件中的所有函数。 这是一个标准文件示例:
int main()
{
printf("hello to all the good people");
printf("hello to all the good people %d ", GetLastError());
for(int i =0; i<15; i++)
{
if(i == 5)
{
switch(i)
{
case 0:
break;
}
}
}
}
与此同时,我只使用以下REGEX成功捕获函数:
regex = re.findall('\w+\s*?[(].*[)]', _content) #'\w+\s*?[(]*[)]'
for i in regex:
print i
我的问题是:
printf ("%s", get_string());
如何使其与引号之间的()
不相关而不是引号之间的()
(如果我有行:
printf("hello to j. (and rona) %s", get_family_name());
他会知道提取:
foo name: parameters:
printf "hello to j. (and rona) %s", get_family_name()
get_family_name none
答案 0 :(得分:1)
您无法使用正则表达式解析C.
还有另一个question用于使用正则表达式解析HTML;这里给出的答案也适用于C,基本上也适用于任何有用的编程语言。
pycparser库看起来可能有用,尤其是func_calls example - 事实上,我认为以下代码段(根据该示例改编)将完全符合您的要求,尽管我还没有'测试了它:
from pycparser import c_ast, parse_file
class FuncCallVisitor(c_ast.NodeVisitor):
def visit_FuncCall(self, node):
print("{} called at {}".format(node.name.name, node.name.coord))
ast = parse_file("myfile.c", use_cpp=True)
v = FuncCallVisitor()
v.visit(ast)