🏴☠️ Level 19: Die Regex-Zauberei – Muster in Texten entdecken!
Stell dir vor, du hast 10.000 Logbuch-Einträge und musst ALLE Daten finden, die mit "Schatz" anfangen... oder ALLE E-Mail-Adressen extrahieren... Aber warte mal: Gibt es nicht eine Magie, um solche Muster blitzschnell zu finden? 🤔
Ahoi, du Muster-Detektiv! Manchmal musst du nicht nach einem exakten Wort suchen, sondern nach einem Muster: Alle Telefonnummern, alle Datumsangaben, alle URLs. In Level 19 zeigt dir Käpt'n Nico Poser die Superkraft der Regulären Ausdrücke (Regex) – die Geheimsprache der Textanalyse!
🔍 Was sind Regex? (Die Schatzkarten-Syntax)
Regex sind wie Wildcards auf Steroiden. Mit \d findest du JEDE Ziffer, mit \w JEDEN Buchstaben. * bedeutet "beliebig oft", + bedeutet "mindestens einmal". So kannst du mit re.search(r'\d{3}-\d{3}', text) Telefonnummern im Format "123-456" finden – ohne jede Ziffer einzeln zu prüfen!
⚡ Die wichtigsten Regex-Zeichen: \d – Jede Ziffer (0-9) \w – Jeder Buchstabe/Zahl (a-z, A-Z, 0-9, _) . – Jedes Zeichen * – 0 oder mehr Wiederholungen + – 1 oder mehr Wiederholungen ? – 0 oder 1 Wiederholung
┌──────────────────────────────────────────┐│REGEX PATTERN MATCHING│└──────────────────────────────────────────┘Text: "Schatz bei 42°N, 17°W"
Pattern:r'\d+°[NW]'│├──\d+: Eine oder mehr Ziffern├──°: Exakt das °-Zeichen└──[NW]: Entweder N oder WMatches:───────►"42°N"───────►"17°W"Verwendung:import recoords = re.findall(r'\d+°[NW]', text)
⚓ Deine Mission: Entschlüssle die Karten!
In Level 19 sind alte Texte voller verschlüsselter Hinweise. Du musst Regex nutzen, um die Koordinaten, Schatznamen und geheimen Codes zu extrahieren. Wer die Muster erkennt, findet den Schatz – der Rest irrt ewig umher!
Käpt'n Nico sagt: „Ein Pirat mit Regex ist wie ein Falke – er sieht Muster, die andere übersehen."
Finde die Muster, Landratte! Deine Leyla 🐀
▶
🤓 Für Code-Nerds: Noch tiefer eintauchen ⚓
Die komplette Regex-Syntax: Dein Schweizer Messer
Ahoi, du Code-Kryptograph! Die Basics kennst du – jetzt wird's wild! \d{3,5} bedeutet "3 bis 5 Ziffern". ^ markiert den Zeilenanfang, $ das Ende. [a-z] ist jeder Kleinbuchstabe, [^0-9] alles AUSSER Ziffern (das ^ im Kontext von [] negiert!). (abc|xyz) bedeutet "abc ODER xyz". Und dann gibt's noch die Gierigen vs. Faulen Quantoren: .* (gierig, nimmt so viel wie möglich) vs. .*? (faul, nimmt so wenig wie nötig). Das ist wie ein Anker – mal hältst du fest, mal lässt du locker!
Gruppen: Daten extrahieren wie ein Profi
Mit Capturing Groups kannst du Teile deines Matches isolieren: r'(\d{2})-(\d{2})-(\d{4})' für Daten. match.group(1) gibt dir den Tag, group(2) den Monat, group(3) das Jahr. Named Groups sind noch eleganter: r'(?P<tag>\d{2})-(?P<monat>\d{2})' – dann kannst du match.group('tag') nutzen! Käpt'n Nico extrahiert damit automatisch Daten aus tausenden Logbuch-Einträgen – ein Einzeiler statt 100 Zeilen String-Parsing!
re.compile: Performance für Wiederholungen
Wenn du dasselbe Pattern oft nutzt, kompiliere es: pattern = re.compile(r'\d+'); matches = pattern.findall(text). Python cached das kompilierte Pattern – deutlich schneller bei tausenden Searches! Das ist wie ein Kompass, den du nur einmal kalibrieren musst, statt bei jeder Messung neu. Bei großen Datenmengen (z. B. Log-Analyse) spart das Sekunden bis Minuten!
Regex Performance: Die dunkle Seite
Regex können LANGSAM sein! Ein gieriges Pattern wie .*.* auf langem Text kann zu "Catastrophic Backtracking" führen – der Regex-Engine braucht ewig, um alle Möglichkeiten durchzutesten. Vermeide verschachtelte Quantoren ((.+)+) und nutze spezifische Patterns (\d+ statt .+). Käpt'n Nico hat mal einen Server mit (.*)*(.*)* zum Absturz gebracht – seitdem testet er Regex an kurzen Beispielen, bevor er sie auf Gigabyte-Dateien loslässt!
Alternativen zu Regex: Wann NICHT nutzen?
Regex sind nicht für alles ideal! HTML/XML parsen? Nutze BeautifulSoup oder lxml – Regex können die verschachtelten Strukturen nicht sauber handhaben (berühmtes Zitat: "You can't parse HTML with regex"). CSV-Dateien? csv.reader() ist robuster. JSON? json.loads(). Regex sind perfekt für unstrukturierte Texte (Logs, E-Mails, freie Texte), aber für strukturierte Daten gibt's bessere Tools. Wähle weise, Landratte!
Real-World Regex: Käpt'n Nicos Top 5
1. E-Mail: r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
2. URL: r'https?://[^\s]+'
3. Telefon (DE): r'\+49\s?\d{2,5}\s?\d{5,}'
4. IP-Adresse: r'\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b'
5. Hex-Farbe: r'#[0-9A-Fa-f]{6}'
Diese Patterns sind in Nicos "Schatzkiste" – er nutzt sie täglich für Data Scraping und Log-Analyse!
Regex-Tester: Dein Trainingsplatz
Bevor du Regex in Production nutzt, teste sie auf regex101.com oder regexr.com! Diese Tools zeigen dir live, was gematcht wird, erklären die Syntax und warnen vor Fehlern. Käpt'n Nico entwickelt JEDES komplexe Pattern dort – es spart Stunden von Debugging. Bonus: Du kannst dort auch Unit-Tests für deine Regex schreiben!
Käpt'n Nicos Regex-Manifest
1. Start einfach – baue Patterns schrittweise auf.
2. Teste an Beispielen – sowohl Matches als auch Non-Matches.
3. Nutze Raw Strings (r'...') – verhindert Backslash-Chaos.
4. Kommentiere komplexe Patterns – nach 3 Monaten verstehst du sie sonst nicht mehr.
Mit diesen Regeln wirst du zum Regex-Meister – ohne dich im Muster-Dschungel zu verlaufen!
Regex sind wie alte Piraten-Karten: Kryptisch, mächtig und unglaublich wertvoll, wenn man sie lesen kann. Beherrsche sie, und du findest Schätze in jedem Text!
Die Muster gehören dir! 🏴☠️ Deine Leyla 🐀
Verfügbare Befehle:
import re – Regex-Modul.
re.search(pattern, text) – Suche Muster.
re.findall(pattern, text) – Finde alle.
print("Feuer") – 🔥 Schießt eine Kanonenkugel in Blickrichtung!
move(), turn() – Standard-Befehle.
wait() – ⏳ Warte einen Zug (für bewegende Monster!).
ℹ️ Tipp:
Die Monster stehen oft direkt vor dir nach einer Drehung oder mitten auf dem Weg.
Prüfe am besten vor jedem Schritt oder vor jeder Teilstrecke, ob der Weg frei ist.
🏴☠️ Level 19: Die ewigen Logbücher – Daten speichern und lesen!
Ahoi, Hüter der Erinnerungen! Bisher verschwanden alle deine Daten, sobald das Programm endete – wie Fußspuren im Sand. Aber ein echter Pirat führt Logbücher, die Jahrhunderte überdauern! In Level 19 lehrt dich Käpt'n Leyla, wie du Daten in Dateien speicherst und wieder einliest – für immer!
Dateien öffnen: Der Schlüssel zur Schatzkammer
Mit open("logbuch.txt", "w") öffnest du eine Datei zum Schreiben ("w" für write). Mit "r" (read) liest du sie, mit "a" (append) fügst du hinzu. Python erstellt die Datei automatisch, wenn sie nicht existiert!
with: Der sichere Hafen
Profis nutzen with open(...) as datei: – das sogenannte Context Manager. Vorteil? Python schließt die Datei automatisch, wenn du fertig bist. Keine Ressourcenlecks, keine vergessenen Dateien!
Beispiel: with open("schatz.txt", "w") as f: f.write("Gold: 1000 Münzen")
JSON: Das universelle Format
Für komplexere Daten wie Listen und Dictionaries nutzen wir JSON. Mit import json und json.dump(daten, datei) speicherst du Python-Objekte, mit json.load(datei) lädst du sie wieder. Perfekt für Spielstände, Konfigurationen und mehr!
💾 Dateioperationen in der echten Welt:File I/O (Input/Output) ist überall! Von Spielständen über Konfigurationsdateien bis zu Datenbanken – das Verständnis von Persistenz und Datenspeicherung ist fundamental für jeden Entwickler!