Regex, die verschachtelte Konstrukte richtig findet?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 6. August 2007, 17:08

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
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Montag 6. August 2007, 17:12

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
BlackJack

Montag 6. August 2007, 17:13

Das ist mit regulären Ausdrücken nicht möglich.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 6. August 2007, 17:19

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Montag 6. August 2007, 20:50

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
Antworten