Mustersuche mit Python

Durchsuchen langer Texte

Es kommt des öfteren vor, dass man bestimmte Zeichenketten in einem langen Text suchen möchte. Textverarbeitungsprogramme stellen in der Regel spezielle Suchfunktionen für diesen Zweck bereit.

Die RFC 5322 ist ein recht langer Text, in dem der Aufbau einer E-Mail spezifiziert wird. Dieser Text soll mit Hilfe von Python nach bestimmten Zeichenmustern durchsucht werden. Das folgende Programm zeigt, wie man das mit Hilfe regulärer Ausdrücke machen kann.

import re

def suchen(regAusdruck, textdatei):
    f = open(textdatei, 'r', encoding = 'iso-8859-1')
    rfctext = f.read()
    f.close()  
    for match in re.finditer(regAusdruck, rfctext):
        print(match.group())

# Test
suchen("([1-9ABC]\.)+", "rfc5322.txt")

Das Modul re stellt die zur Verarbeitung regulärer Ausdrücke benötigten Operationen bereit.

Die Anweisung re.finditer(regAusdruck, rfctext) erzeugt einen Iterator, der über alle gefundenen, nicht überlappenden Übereinstimmungen iteriert.

Die Funktion suchen(regAusdruck, textdatei) gibt somit alle Zeichenketten in der übergebenen Textdatei aus, die dem übergebenen regulären Ausdruck entsprechen.

Anstatt einen Iterator zu benutzen, kann man auch die gefundenen Zeichenketten in Form einer Liste erzeugen lassen. Hierzu stellt das Modul re die Operation re.findall(regAusdruck, rfctext) zur Verfügung. Aber Achtung, runde Klammern zur Gruppierung von Teilausdrücken werden bei dieser Operation etwas merkwürdig behandet (siehe Python-Dokumentation).

import re

def suchen(regAusdruck, textdatei):
    f = open(textdatei, 'r', encoding = 'iso-8859-1')
    rfctext = f.read()
    f.close()
    return re.findall(regAusdruck, rfctext)

# Test
print(suchen("(?:[1-9ABC]\.)+", "rfc5322.txt"))

Aufgabe 1

Besorge dir die RFC 5322 und teste die oben gezeigten Suchfunktion.

Aufgabe 2

Reguläre Ausdrücke enthalten neben Zeichen, die in den gesuchten Zeichenfolgen vorkommen können, auch sogenannte Metazeichen. Im regulären Ausdruck RFC[0-9]+ sind dies die Zeichen [, ], - und +. Weitere Metazeichen, die in regulären Ausdrücken vokommen können, sind die Zeichen *, ?, |, \, ( und ). Ziel dieser Aufgabe ist es, experimentell die Bedeutung der Metazeichen herauszufinden.

Benutze die folgenden regulären Ausdrücke als Suchmuster und lasse sie mit dem oben gezeigten Python-Programm beim Text RFC 5322 auswerten. Beschreibe jeweils, wonach gesucht wird.

Denke dir selbst weitere Suchmuster aus, um die Bedeutung der Metazeichen zu erschließen.

Aufgabe 3

Entwickle einen regulären Ausdruck, mit dem man alle in der RFC 5322 vorkommenden E-Mail-Adressen als Suchergebnis geliefert bekommt.

X

Fehler melden

X

Suche