Seite 1 von 1

Wiki Syntax mit RE parsen

Verfasst: Sonntag 18. Januar 2009, 12:35
von HerrHagen
Hallo,
ich bin gerade dabei mich in RE einzuarbeiten.
Als Übung hab ich mir das parsen einer Wiki-Syntax überlegt.
Ich weiß, das ich mit folgendem Ausdruck die Überschriften extrahieren kann:

Code: Alles auswählen

import re

test = """==Beispiel==
Hier eine BNF für 3*3=4 eine deutsche:
Die Ausformulierung lautet: 
Eine Postanschrift besteht aus einem Personenteil 1*1==3

==Punkt 2==
bla bla.

==Punkt 3==
bla bla bla.
"""
print re.findall(r"^==(.*?)==$", test, re.MULTILINE)
Meine Frage ist nun folgende: Kann ich auch mit einem Ausdruck mir nicht nur den Titel, sondern auch den dazugehörigen Text auslesen? Ich weiß das ich die Position der Überschriften bestimmen kann und dann den Text teilen. Mich interessiert ob es auch mit einem Ausdruck möglich ist. D.h. der Titel sollte in einer Gruppe stehen, der dazugehörige Text in einer zweiten.

MFG HerrHagen

Verfasst: Sonntag 18. Januar 2009, 13:12
von helduel
Moin,

als Annäherung habe ich das hier fabriziert:

Code: Alles auswählen

print re.findall(r"==(.*?)==(.*?)(?=^==.*?==)", test, re.MULTILINE|re.DOTALL)
Allerdings ist es IMO keine gute Idee, sowas mit einer Regex erschlagen zu wollen. Das ganze wird sehr schnell sehr knifflig - wenn nicht gar unmöglich.

Gruß,
Manuel

Verfasst: Sonntag 18. Januar 2009, 13:18
von Hyperion
Ich denke auch, dass man dazu wohl eher etwas wie pyparsing nehmen sollte!

Es gibt da sogar ein Beispiel zum Parsen von Wiki ähnlichen Strukturen:
http://pyparsing.wikispaces.com/file/view/simpleWiki.py

Verfasst: Sonntag 18. Januar 2009, 13:24
von Leonidas
helduel hat geschrieben:Allerdings ist es IMO keine gute Idee, sowas mit einer Regex erschlagen zu wollen. Das ganze wird sehr schnell sehr knifflig - wenn nicht gar unmöglich.
Das Problem ist die Verschachtelung - da reichen dann Reguläre Ausdrücke nicht mehr aus. Wir hatten schon einmal so einen Thread, wo versucht wurde Wiki-Syntax (ich glaube Creole) mit Regulären Ausdrücken zu parsen.

Verfasst: Sonntag 18. Januar 2009, 14:48
von HerrHagen
Danke für die Antworten!