Reguläre Ausdrücke in Python
Dokumentation zu regulären Ausdrücken in Python
Ich möchte hier nicht die vorhandene Dokumentation wiederholen, daher sei hiermit auf darauf verwiesen:
Beispiele
Zum testen von Regulären Ausdrücken eigent sich folgender Aufruf:
p = re.search(r'(?P<salutation>^Frau|^Herr)\s+(?P<name>.*)', "Herr Conrad Meier")
Hier wird das Modul re direkt verwendet, was zum testen ok ist, später ist es besser den regulären Ausdruck zu Kompelieren, damit die Operationen schneller ausgeführt werden können.
p = re.compile(r'(?P<salutation>^Frau|^Herr)\s+(?P<name>.*)') p.search("Herr Conrad Meier")
Adressblock parsen
Wir wollen folgenden Adressblock parsen und Anrede, Name sowie PLZ und Ort auslesen.
ADDRESSBLOCK = u""" Inqbus GmbH & Co. KG Herr Maik Derstappen Geschäftsführer Karl-Heine-Str. 99 04109 Leipzig Plagwitz Sachsen Deutschland"""
Wir definieren uns nun 2 reguläre Ausdrücke, die die Zeile mit der Anrede und dem Namen, sowie die Zeile mit der PLZ und dem Ort beschreiben. In den Ausdrücken werden benannte Guppen erzeugt, um auf diese später einfach zugreifen zu können.
z.B. erzeugt folgender Ausdruck eine Gruppe mit dem Namen salutation, die die Anrede (Frau/Herr) enthält.
(?P<salutation>^Frau|^Herr)
ReSalutationName = re.compile(r'(?P<salutation>^Frau|^Herr)\s+(?P<name>.*)') ReZipecodeCity = re.compile(r'(?P<zipcode>\d{4,5})\s+(?P<city>.*)')
Im folgenden iterieren wir über die Zeilen des Adressblockes und wenden die regulären ausdrücke auf jede Zeile an. Wenn z.B. der erste Ausdruck ReSalutationName.search(line.strip()) ein Ergebnis zurück liefert, können wir auf die definierten Gruppen (salutation, name) per match_object.group('Gruppenname') zugreifen und bekommen den Teilstring der Gruppe zurück.
for line in ADDRESSBLOCK: salutation_name = ReSalutationName.search(line.strip()) if salutation_name: salutation = salutation_name.group('salutation') name = salutation_name.group('name') continue zipcode_city = ReZipecodeCity.search(line.strip()) if zipcode_city: zipcode = zipcode_city.group('zipcode') city = zipcode_city.group('city') continue