Rolf b: Wo hakt es bei meinem regulären Ausdruck?

Beitrag lesen

Ok, solange NUR im dritten Teil Subklammern stehen können, kriegt man das hin, wenn man den Suchausdruck für den dritten Teil greedy macht (sprich: .* statt .*?). Unter regex101.com kannst Du das ausprobieren.

Mein Pattern dort:
^(?<A>\(.*?\))(?<B>\(.*?\))(?<C>\(.*\)),(?<D>\(.*?\)),(?<E>\(.*?\))$

Oder so, wenn Du die äußeren Klammern nicht im Match haben willst:
^\((?<A>.*?)\)\((?<B>.*?)\)\((?<C>.*)\),\((?<D>.*?)\),\((?<E>.*?)\)$

Link zum Beispiel in regex101

Ich habe die 5 Hauptbereiche man benamst, dann greift es später sich leichter zu.

Teststring: (A,B,C)(q,w)((A,q,B),(B,w,C)),(A),(C)

Liefert:

A=(A,B,C)
B=(q,w)
C=((A,q,B),(B,w,C))
D=(A)
E=(E)

Schwieriger wird es, wenn auch die anderen Teilausdrücke Unterklammern enthalten dürfen. In dem Fall musst Du wohl oder übel die Grammatik aufschreiben, der diese Teilausdrücke folgen dürfen, und die Regex entsprechend aufblasen.

Noch schlimmer wird es, wenn beliebig tief geschachtelte Unterklammerungen erlaubt sind; in dem Fall hättest Du rekursive Teile in deiner Regex. Sowas gibt es, aber es ist abzählbar kompliziert und in diesen Fällen baue ICH lieber einen Parser von Hand :)

Rolf