Reguläre Ausdrücke

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
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Hallo,

ich hab ein kleines Problem mit Regulären Ausdrücken.

Code: Alles auswählen

CONFIG = """
if X-Spam == YES {
   create dir = True
   folder = Spam
}

if X-Virus == YES {
   create dir = True
   folder = Virus
}

if From == regex([\w]*@gmx.at) {
   create dir = True
   folder = GMX
}

"""
Nun will ich einzelne Sektionen raus filtern.

if*==*{*}

Da wo ich die Wildcards gesetzt habe, diese Bereiche will ich extra haben.

Code: Alles auswählen

r = re.compile("if[\w\s\-]*==[\w\s\-\.\@\(\)\*_\[\]\\\]*\{[\w\s\n=]*\}")
r2 = re.compile("(?<=\if)[\w\s\-\.\@\(\)\*_\[\]=\\\]*(?=\{)")
r3 = re.compile("(?<=\{)[\w\s\n=]*(?=\})")
r4 = re.compile("(?<=regex\()[\w\s\-\.\@\*_\[\]=\\\]*(?=\))")

...

r = re.compile("if[\w\W]*==[\w\W]*\{[\w\W]*\}")
r2 = re.compile("(?<=\if)[\w\W]*(?=\{)")
r3 = re.compile("(?<=\{)[\w\W]*(?=\})")
r4 = re.compile("(?<=regex\()[\w\W]*(?=\))")
Irgendwie klappt das "\W" nicht, somit sehen meine Regulären Ausdrücke nach chaos pur aus.

Bei dem Bereich "regex([\w]*@gmx.at)" kann man selber Reguläre Ausdrücke angeben. Das Problem ist wenn hier drinnen ein Komplexer Regulärer Ausdruck stehen würde, dann würden meine Regulären Ausdrücke nicht mehr korrekt Arbeiten.

Hoff mal mir kann jemand helfen :)
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Für dein Problem würde ich mich mal mit den Themen Lexer/Parser auseinander setzten, und das nicht rein mit regulären Ausdrücken verarbeiten. (Wird vermutlich auch nicht funktionieren, wenn reguläre Ausdrücke in dem String stehen).

Als Lösung für Python gibt es da z.B. das Programm ANTLR, hab aber noch nie damit gearbeitet.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ice2k3 hat geschrieben:Als Lösung für Python gibt es da z.B. das Programm ANTLR, hab aber noch nie damit gearbeitet.
Für Python ist eher PLY interessant.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Code: Alles auswählen

print re.findall(r"(?s)if\s+(.*?)\s*==\s*(.*?)\s*{(.*?)}", CONFIG)
Stefan
Antworten