Seite 1 von 1

Regex, die verschachtelte Konstrukte richtig findet?

Verfasst: Montag 6. August 2007, 17:08
von EnTeQuAk
Hallo alle zusammen!

Ich hänge gerade an einem Fehler, den ich selber nicht beheben kann, ohne dabei umständlich einiges neu zu schreiben.

Es geht um folgendes Problem:

Ich habe einen Markup-Block, der wiefolgt aufgebaut ist:

Code: Alles auswählen

{{{
dies ist block eins
{{{
dies ist block zwei
}}}
}}}
Ich möchte, das Block zwei einfach als normaler Text in Block eins enthalten ist.
Meine bisherige Regex, `` r'\{\{\{(.*?)\}\}\}(?sm)' `` kann das nicht.

Ist dies überhaupt mit Regular Expressions möglich oder muss ich doch etwas mehr schreiben, als mir lieb ist?


MfG EnTeQuAk

Verfasst: Montag 6. August 2007, 17:12
von apollo13
Ich habe das auch schon oft versucht, aber da ist ein Lexer (ich hoff ich hab das Richtige dawischt) einfach effektiver.
Vor allem ist es mit Regex nicht möglich solche Konstrukte zu matchen (Okay vlt. schon aber sicher nicht in einer 5-Zeilen Regex).

MfG apollo13

Verfasst: Montag 6. August 2007, 17:13
von BlackJack
Das ist mit regulären Ausdrücken nicht möglich.

Verfasst: Montag 6. August 2007, 17:19
von EnTeQuAk
BlackJack hat geschrieben: Das ist mit regulären Ausdrücken nicht möglich.
Dann werde ich mich doch an die andere Variante machen.

Hätte ja klappen können, den Quellcode mal wieder klein zu halten ;)

Danke euch beiden!


MfG EnTeQuAk

Verfasst: Montag 6. August 2007, 20:50
von HWK
Falls es sich nur um maximal 2 oder eine andere feste Anzahl Blöcke handelt, ist dies schon möglich. Nur bei beliebig tief verschachtelten Blöcken geht es nicht mit einer Regex.

Code: Alles auswählen

re.sub('{{{(.*){{{(.*)}}}(.*)}}}(?s)', '{{{\\1\\2\\3}}}', 'Text')
MfG
HWK