Я пытаюсь извлечь строку, которая идет перед "(", за которой следует ")". Примечание. Между фигурными скобками может ничего не быть.
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
re.findall(r'.*?(?=\s?\().*?(?=\))', string)
re.findall(r'.*?(?=\s?\()', string)
использование регулярного выражения
regex.search(r'.*?(\((.*?:[()]|[^()]|(?R))*+\))', string)
желаемый результат:
func1, if, func2, func3, func4, func5, func6
Есть ли способ рекурсивно вызвать регулярное выражение?
Обратите внимание, что в C if не является функцией.
Измените .*? перед просмотром на \w+?.
Зачем тебе это? Возможно, вы могли бы написать парсер с помощью SLY (Sly Lex Yacc) или PLY






re.findall(r'\w+?(?=\s?\(.*?\))', string)
Вам нужно использовать \w+? в начале, чтобы совпадением был только один токен, а не все, что находится до (.
Вам нужно различать функции и макросы? Между функциями и указателями на функции? Вы удалили строки и комментарии?