Regex para analizar funciones con profundidad arbitraria

Estoy analizando un lenguaje simple (fórmulas de Excel) para las funciones que contiene. El nombre de una función debe comenzar con cualquier letra, seguido de cualquier número de letras / números, y terminar con un par abierto (sin espacios en el medio). Por ejemploMyFunc(. La función puede contener cualquier argumento, incluidas otras funciones y debe terminar con un par cercano). Por supuesto, las matemáticas dentro de los padres están permitidas=MyFunc((1+1)) y(1+1) no debe detectarse como una función porque falla la regla de función que acabo de describir. Mi objetivo es reconocer las llamadas a funciones de nivel más alto en una fórmula, identificar el nombre de la función, extraer los argumentos. Con los argumentos, puedo buscar recursivamente otras llamadas a funciones.

Usando estotutorial Pirateé las siguientes expresiones regulares. Ninguno parece hacer el truco. Ambos fallan en el caso de prueba pegado a continuación.

Estadebería funciona pero falla completamente:

(?<name>[a-z][a-z0-9]*\()(?<body>(?>[a-z][a-z0-9]*\((?<DEPTH>)|\)(?<-DEPTH>)|.?)*(?(DEPTH)(?!)))\)

Esto funciona para muchos casos de prueba, pero falla para el caso de prueba a continuación. No creo que maneje las funciones anidadas correctamente, solo busca abrir paren / cerrar paren en el anidamiento:

(?<name>[a-z][a-z0-9]*\()(?<body>(?>\((?<DEPTH>)|\)(?<-DEPTH>)|.?)*(?(DEPTH)(?!)))\)

Aquí está la prueba que los rompe a todos:

=Date(Year(A$5),Month(A$5),1)-(Weekday(Date(Year(A$5),Month(A$5),1))-1)+{0;1;2;3;4;5}*7+{1,2,3,4,5,6,7}-1

Esto debe coincidir con:

Date(ARGUMENTS1)
Weekday(ARGUMENTS2)
Where ARGUMENTS2 = Date(Year(A$5),Month(A$5),1)

En cambio, coincide con:

ARGUMENTS2 = Date(Year(A$5),Month(A$5),1)-1)

Estoy usando .net RegEx que proporciona memoria externa.

Respuestas a la pregunta(2)

Su respuesta a la pregunta