Zum Inhalt springen

Aufgabe 06 - Musterjagd

Zu Zen-Modus wechseln

Erste Schritte mit regulären Ausdrücken: fremde Muster entschlüsseln, eigene Muster für Alltagsformate entwickeln und Teilinformationen mit Gruppen extrahieren (siehe Kapitel Reguläre Ausdrücke). Reguläre Ausdrücke funktionieren in fast jeder Sprache und jedem Werkzeug gleich; was Sie hier üben, nutzen Sie auch in VS Code, in Datenbanken und auf der Kommandozeile.

  • Kapitel Reguläre Ausdrücke, insbesondere Bausteine, Anker und Gruppen.
  • Python (re-Modul), regex101.com mit Flavor “Python”.
  • Sie lesen vorhandene Muster und sagen ihr Verhalten präzise voraus.
  • Sie entwickeln eigene Muster iterativ und prüfen sie systematisch mit Positiv- und Negativbeispielen.
  • Sie extrahieren und transformieren Textbestandteile mit Capture-Gruppen und re.sub.
  • Reproduktion: die Bedeutung der Regex-Bausteine wiedergeben, gegebene Muster beschreiben (Teil A).
  • Reorganisation und Transfer: Muster für neue Formate entwickeln und Testfälle konstruieren (Teile B und C).
  • Reflexion, Problemlösung und Urteilsbildung: ein komplexes Format vollständig modellieren und Grenzen des Werkzeugs beurteilen (Teil D).

Die Übung ist auf etwa zwei Stunden ausgelegt. Entwickeln Sie jedes Muster zuerst auf regex101 und übernehmen Sie es dann in den Code. Teil D ist der Expertenteil.

Beschreiben Sie in je einem Satz, worauf diese Muster passen, und geben Sie je ein Beispiel und ein Gegenbeispiel an:

  1. ^\d{4}$
  2. [A-Z][a-z]+
  3. \d+([.,]\d{1,2})?
  4. ^[ABC]\d{3}[a-z]?$

Prüfen Sie Ihre Antworten anschließend auf regex101 und korrigieren Sie, wo nötig.

Entwickeln Sie Muster und testen Sie jedes mit re.fullmatch:

  1. eine österreichische Postleitzahl (vier Ziffern, beginnt nicht mit 0),
  2. ein Datum im Format TT.MM.JJJJ mit grober Bereichsprüfung (Tag 01 bis 31, Monat 01 bis 12),
  3. eine Uhrzeit im Format HH:MM (00:00 bis 23:59),
  4. ein österreichisches Kennzeichen wie VI-123AB (ein bis zwei Buchstaben, Bindestrich, ein bis vier Ziffern, ein bis zwei Buchstaben).

Zu jedem Muster gehört eine kleine Testfunktion mit assert: mindestens drei Strings, die passen müssen, und drei, die scheitern müssen. Wählen Sie die Gegenbeispiele bösartig (fast richtig, um eine Stelle daneben).

  1. Extrahieren Sie mit Capture-Gruppen aus "Termin: 14.03.2026 um 09:30" die Werte Tag, Monat, Jahr, Stunde und Minute, und geben Sie sie einzeln aus.
  2. Wiederholen Sie das mit benannten Gruppen ((?P<day>...)) und begründen Sie in einem Satz, welche Variante Sie bei fünf Gruppen bevorzugen.
  3. Formen Sie mit re.sub und Gruppenreferenzen alle Datumsangaben eines Textes von TT.MM.JJJJ nach JJJJ-MM-TT um.

Eine Filmproduktion benennt Dateien nach dem Schema project_scene-take_camera_version.extension, etwa imagefilm_04-7_B_v03.mp4. Regeln: Projektname aus Kleinbuchstaben und Ziffern, Szene zweistellig, Take ein- bis zweistellig, Kamera ein Großbuchstabe, Version v plus zwei Ziffern (optional, fehlt bei Rohmaterial), Endung mp4, mov oder wav.

  1. Entwickeln Sie ein Muster mit benannten Gruppen, das gültige Namen vollständig zerlegt und ungültige ablehnt. Dokumentieren Sie das Muster mit einem Kommentar je Baustein.
  2. Schreiben Sie parse_filename(name): liefert ein Dictionary mit den Bestandteilen oder None. Testen Sie mit mindestens fünf gültigen und fünf ungültigen Namen (darunter: Version fehlt, Szene dreistellig, Endung avi).
  3. Schreiben Sie mit re.sub eine Umbenennungsvorschau: imagefilm_04-7_B_v03.mp4 wird zu S04T07_B_imagefilm.mp4 (Take zweistellig aufgefüllt; recherchieren Sie, wie eine Ersetzungsfunktion bei re.sub das Auffüllen übernimmt).
  4. Beurteilen Sie abschließend in drei Sätzen: Welche Prüfungen dieses Formats kann die Regex leisten, und welche (etwa “Take 7 existiert wirklich im Projekt”) grundsätzlich nicht? Wo gehört die zweite Sorte hin?
  1. Was unterscheidet re.search von re.fullmatch, und welches der beiden gehört zur Validierung von Benutzereingaben?
  2. Worauf passt ab+, und worauf passt (ab)+?
  3. Warum steht vor jedem Regex-String ein r?
  4. Was leisten Anker wie ^ und $, und was passiert ohne sie?
  5. Ein Kollege will HTML-Dateien mit Regex auswerten. Was raten Sie ihm, und warum?

patterns.py mit allen Mustern und Testfunktionen (laufen fehlerfrei durch), die Antworten aus Teil A als Kommentar, gegebenenfalls filenames.py für Teil D.