Recursive Muster in Regex

Dies ist sehr ähnlich zuRegular Expression passend zu den äußeren Klammern aber ich möchte speziell wissen, wie oder ob es möglich ist, dies zu tun Regex's rekursives Muster? Ich bin noch nicht in der Lage, ein Python-Beispiel für diese Strategie zu finden, also denke, dies sollte eine nützliche Frage sein!

Ich habegesehe etwa Ansprüch Da rekursive Muster können verwendet werden, um ausgeglichene Klammern abzugleichen, aber keine Beispiele mit Pythons Regex package (Hinweis: renich rekursives Muster unterstützen, müssen Sie Regex) verwenden.

EinsAnspruc ist diese Syntax istb(?:m|(?R))*e wo

b beginnt das Konstrukt,m ist das, was in der Mitte des Konstrukts auftreten kann, unde ist das, was am Ende des Konstrukts auftreten kann

Ich möchte Übereinstimmungen für das @ extrahieräußer steht in folgenden Klammern:

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

Bitte beachten Sie, dass dies für @ einfach isinner Hosenträger

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

(In meinem Beispiel habe ich Finditer verwendet (über Übereinstimmungsobjekten), sieheHie.)

So hatte ich gehofft, dass das Folgende oder eine Variation funktionieren würde:

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}")

aber ich werde entweder von [] oder @ geschnaperror: too much backtracking.

Ist es möglich, Übereinstimmungsobjekte für die äußere Klammer mit der Rekursion von regex zu extrahieren?

Offensichtlich laufe ich Gefahr, abgeschossen zu werden mit:

Parsen Sie HTML nicht mit Regexdo dies mit pyparseEinen richtigen Lexer & Parser schreiben, z. mit ply

Ich möchte betonen, dass es sich um @ hande wie man das rekursive Muster benutzt (was, wenn mein Verständnis stimmt, dazu führt, dass wir uns nicht der regulären Sprachanalyse unterziehen, was möglicherweise tatsächlich möglich ist!). Wenn dies möglich ist, sollte dies eine sauberere Lösung sein.