我正在尝试提取“(”后跟“)”之前的字符串。注意:大括号之间可能没有,也可能没有。
string = "int a = {0}; func1(arg1, arg11); if(var1 == data1 && func2(arg2)) { var2 = func3(arg3, func4(arg4)) func5(var5) } else { (void)func6(arg6) }"
尝试过(在Python 3.12.3中):
使用重新模块
re.findall(r'.*?(?=\s?\().*?(?=\))', string)
re.findall(r'.*?(?=\s?\()', string)
使用正则表达式
regex.search(r'.*?(\((.*?:[()]|[^()]|(?R))*+\))', string)
所需输出:
func1
、if
、func2
、func3
、func4
、func5
、func6
有没有办法递归调用正则表达式?
re.findall(r'\w+?(?=\s?\(.*?\))', string)
您需要在开头使用
\w+?
,以便匹配只是一个标记,而不是 (
之前的所有内容。