Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

Sie sind hier: Startseite / Tech-Blog / Reguläre Ausdrücke in Python

Reguläre Ausdrücke in Python

Mit Regulären Ausdrücken (Regular Expressions) können Texte sehr flexibel und schnell verarbeitet werden. Da man in der Programmierung häufig auf Reguläre Ausdrück angewiesen ist, fasse ich hier ein paar Beispielhafte Lösungen zusammen.

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