i

Reguläre Ausdrücke mit Python

Überprüfung des gesamten Eingabeworts

Für die Verwendung von regulären Ausdrücken in Python bietet sich das Python-Modul re (regular expression) an. Dabei musst du das Modul zu Beginn laden: import re.

Danach kannst du die Funktion re.fullmatch(regex,wort) verwenden. Sie gibt zurück, ob ein Wort als Ganzes dem Muster des übergebenen regulären Audruck folgt. Im Beispiel hier prüft das Programm für das eigegebene Wort, ob es dem Muster folgt, das in der Variablen regex gespeichert wurde.

Aufgabe 1

  1. Teste das Programm mit verschiedenen Eingaben.
  2. Ändere das Programm ab, damit nur Wörter akzeptiert werden, die mit "b" beginnen und mindestens zwei "a" enthalten. Teste dein Programm mit verschiedenen Eingaben!
  3. Schreibe ein Programm, das solange eine Eingabe vom Benutzer möchte, bis dieser einen PIN-Code mit vier Ziffern eingegeben hat.
  4. Schreibe ein Programm, das solange eine Eingabe einliest, bis eine korrekte Uhrzeit eingegeben wurde.

Suchen von Mustern in einem Text

Reguläre Ausdrücke werden oft verwendet, um ein bestimmtes Muster innerhalb eines Textes oder einer Datei zu finden. Im Beipielprogramm hier sollen Textstellen gefunden werden, an denen mindestens 2 Vokale aufeinanderfolgen ("[aeiou]{2,}").

Dazu kannst du die Funktion re.finditer( regex , text ) verwenden. Sie findet iterativ alle Vorkommen des Musters im eingegebenen Text. Die Trefferliste kannst du im Anschluß mit einer for-Schleife durchlaufen und für jeden Treffer die Position (den Indexbereich) im Text mit den Funktionen start() und end() ermitteln.

Aufgabe 2

  1. Teste das Programm mit verschiedenen Eingaben.
  2. Ändere das Programm ab, damit auch Doppelvokale am Wortanfang (z.B. bei "Eis") ausgegeben werden.
  3. Schreibe ein Programm, das einen Medienbeitrag einliest und alle gefundenen Hashtags (ohne das "#"-Zeichen) ausgibt.
  4. Finde in einem Eingabetext alle Geldangaben in Euro und gibt die Summe der gefundenen Beträge aus!

Aufgabe 3 - E-Mail-Adressen analysieren

In der Datei inf-schule-emails.liste wurden 1000 zufällige E-Mail-Adressen erzeugt. Lade diese Datei herunter und führe das folgende Programm auf deinem PC im selben Ordner wie die Datei aus.

import re
regex = "[^@]{2,}@[^@]{4,}"  # mind. 2 Zeichen vor dem "@" und mind. 4 dahinter
with open("inf-schule-emails.liste", 'r') as datei:
    adressen = datei.readlines()  # Liest alle Zeilen der Datei
    for adresse in adressen:
        adresse=adresse.strip()   # Entfernen des Zeilenumbruchs
        if re.fullmatch( regex , adresse ):
            print(adresse)

Jetzt müsstest du die komplette Liste der E-Mail-Adressen ausgegeben bekommen, da alle Adressen länger sind, als im regulären Ausdruck gefordert.

Ergänze das Programm, damit ...

  1.   nur E-Mail-Adressen ohne Ziffern ausgegeben werden.
  2.   nur E-Mail-Adressen mit kurzem Vor- und Nachnamen ausgegeben werden (je max. 4 Zeichen). Hinweis: der Punkt (".") ist ein Metazeichen und muss mit "\." maskiert werden!
  3.   nur E-Mail-Adressen der Domain inf-schule.de ausgegeben werden, die mit einer Ziffer beginnen.
  4.   nur E-Mail-Adressen ausgegeben werden, bei denen die Quersumme der Ziffern größer 20 ist.

Zusatzaufgabe: Denke dir eine eigene Anwendung mit regulären Ausdrücken und Dateien aus!

Projektidee HTMl-Code

Quelltextausschnit

HTML-Quelltext anfordern und analysieren

Hier siehst du einen Ausschnitt aus dem Quelltext der Startseite von inf-schule.de. Gelb markiert ist eine Stelle, an der ein Hauptkapitel (hier: Algorithmen) definiert wurde.

Du könntest z.B. alle Kapitelnamen im HTML-Quelltext automatisiert finden und ausgeben. Aus dem Ausschnitt lässt sich der folgende reguläre Ausdruck ableiten: title\">[^<]*</div>. Das Element [^<] bedeutet dabei, dass es sich um alle Zeichen außer dem "<" handeln darf. Das "^" ist also ein Metazeichen für "nicht".

Im folgenden Quellcode wird mit dem Modul requests eine Verbindung zum Server aufgebaut und der HTML-Quelltext angefordert, empfangen und dann analysiert:

import re
import requests
url = "https://inf-schule.de"  # Deine Ziel-Domain
response = requests.get(url)
if response.status_code == 200:
    text = response.text
else:
    text=""
    print("no response")
regex   = "title\">[^<]*</div>"
treffer = re.finditer( regex , text )
for fund in treffer:
    anf  = fund.start()+7 # ohne "title\>"
    ende = fund.end()-6   # ohne "</div>"
    print(text[anf:ende] + "("+str(anf) + "-" + str(ende-1) + ")" )

Das Program kannst du z.B. in Thonny laden und ausführen. Evtl. musst du noch das Modul requests nachinstallieren.

Suche dir eine eigene spannende Aufgabe, um automatisiert aus einer Internetseite Informationen herauszulesen!

Suche

v
100.130.2.2.5 Reguläre Ausdrücke mit Python
Kopieren durch Anklicken

Rückmeldung geben