Patrón recursivo en expresiones regulares

Esto está muy relacionado conExpresión regular para combinar con los soportes externos sin embargo, específicamente quiero saber cómo o si es posible hacer estopatrón recursivo de la expresión regular? Todavía tengo que encontrar un ejemplo de Python usando esta estrategia, ¡así que creo que esta debería ser una pregunta útil!

Hevisto algunos reclamaciones ese los patrones recursivos se pueden usar para unir paréntesis equilibrados, pero no hay ejemplos que usen el pitónregex paquete (Nota: reno admite el patrón recursivo, debes usar regex).

UnoReclamación es esa sintaxisb(?:m|(?R))*e dónde:

b es lo que comienza la construcción,m es lo que puede ocurrir en el medio de la construcción, ye es lo que puede ocurrir al final de la construcción

Quiero extraer coincidencias para elexterior llaves en lo siguiente:

"{1, {2, 3}} {4, 5}"
["1, {2, 3}", "4, 5"]  # desired

Tenga en cuenta que es fácil hacer lo mismo parainterior tirantes:

re.findall(r"{([^{}]*)}", "{1, {2, 3}} {4, 5}")
['2, 3', '4, 5']

(En mi ejemplo, estaba usando finditer (sobre objetos de coincidencia), veaaquí.)

Así que esperaba que lo siguiente, o alguna variación, funcionara:

regex.findall(r"{(:[^{}]*|?R)}", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:[^{}]*|?R)})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*|(?R))*})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*)|(?R)*})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:[^{}])|(?R)})", "{1, {2, 3}} {4, 5}")

pero estoy arruinado por [] oerror: too much backtracking.

¿Es posible extraer objetos de coincidencia para el paréntesis externo utilizando la recursividad de expresiones regulares?

Obviamente, corro el riesgo de ser derribado con:

no analizar html con regexhacer esto con pyparseescribir un lexer y analizador adecuado p. usando la capa

Quiero enfatizar que esto se tratacómo usar el patrón recursivo (que si mi comprensión es correcta, nos lleva fuera del análisis de lenguaje regular, ¡entonces puede ser posible!). Si se puede hacer, esta debería ser una solución más limpia.

Respuestas a la pregunta(2)

Su respuesta a la pregunta