Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
kurse:ef05a-2021:regex [2022/05/02 11:29] Ivo Blöchliger created |
kurse:ef05a-2021:regex [2022/05/12 09:07] (current) Ivo Blöchliger [Wordle-Pro mit regular Expressions] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Regular Expressions ====== | ====== Regular Expressions ====== | ||
Beschreibung von Text-Mustern. Zum Suchen, Extrahieren und Ersetzen von Text. | Beschreibung von Text-Mustern. Zum Suchen, Extrahieren und Ersetzen von Text. | ||
+ | Gibt es in (fast) allen Programmiersprachen und jedem besseren Text-Editor (z.B. Notepad++, VisualCode, vim, etc.) | ||
Je nach Implementation gibt es kleine Unterschiede zwischen Programmiersprachen oder Text-Editoren. | Je nach Implementation gibt es kleine Unterschiede zwischen Programmiersprachen oder Text-Editoren. | ||
Line 7: | Line 8: | ||
Wenn nicht speziell, steht ein Zeichen für sich selbst in einer regular Expression. Z.B. matcht /hallo/ nur genau " | Wenn nicht speziell, steht ein Zeichen für sich selbst in einer regular Expression. Z.B. matcht /hallo/ nur genau " | ||
- | * '' | + | * '' |
* '' | * '' | ||
* '' | * '' | ||
Line 13: | Line 14: | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
+ | * '' | ||
Quantoren: | Quantoren: | ||
- | * '' | + | * '' |
- | * '' | + | * '' |
* ''?'' | * ''?'' | ||
* '' | * '' | ||
- | * '' | + | * '' |
- | * '' | + | * '' |
Gruppen: | Gruppen: | ||
Line 30: | Line 33: | ||
===== Ausprobieren ===== | ===== Ausprobieren ===== | ||
- | * https:// | + | * https:// |
==== Links extrahieren ==== | ==== Links extrahieren ==== | ||
Line 38: | Line 41: | ||
<a href=' | <a href=' | ||
<a href=' | <a href=' | ||
- | <a href=' | + | <a href=' |
+ | <a href=' | ||
<a href=' | <a href=' | ||
- | <a href=' | + | <a href=' |
+ | <a href=' | ||
</ | </ | ||
* Vervollständigen Sie obige Links mit der vollständigen Adresse: https:// | * Vervollständigen Sie obige Links mit der vollständigen Adresse: https:// | ||
* Im angezeigten Text soll die Pfadangabe und das .html verschwinden (also nur noch wordle anstatt ./ | * Im angezeigten Text soll die Pfadangabe und das .html verschwinden (also nur noch wordle anstatt ./ | ||
+ | |||
+ | <hidden Lösungsvorschläge> | ||
+ | <code txt> | ||
+ | search for | ||
+ | ' | ||
+ | |||
+ | search for | ||
+ | ' | ||
+ | replace by | ||
+ | ' | ||
+ | |||
+ | search for | ||
+ | > | ||
+ | replace by | ||
+ | >$1< | ||
+ | </ | ||
+ | </ | ||
+ | ==== Weitere Übungen ==== | ||
+ | Mit einem [[https:// | ||
+ | |||
+ | Diese Wortliste soll z.B. für ein Wordle-Spiel gebraucht werden. Dazu sind allerdings noch einige Aufräumarbeiten nötig: | ||
+ | * Extrahieren Sie erst die Zeilen, deren Wörter mindestens 100 mal gefunden wurden. | ||
+ | * Hinweis: Das könnte auch auf der Kommandozeile mittels '' | ||
+ | * Entfernen Sie alle Zahlen (und den Leerschlag) | ||
+ | * Hinweis: das könnte auch auf der Kommandozeile mittels '' | ||
+ | Dann wollen wir mal «spezielle» Wörter suchen: | ||
+ | * Suchen Sie alle Wörter, die einen Doppelbuchstaben (zwei gleich hintereinander) haben. | ||
+ | * Suchen Sie alle Wörter, in denen ein Buchstabe zwei mal vorkommt. | ||
+ | * Suchen Sie alle Wörter, in denen ein Buchstabe drei mal vorkommt. | ||
+ | |||
+ | |||
+ | Auf https:// | ||
+ | * Evtl. ß durch ss ersetzen. | ||
+ | * Evtl. ä, ö, ü durch ae, oe, ue ersetzen. | ||
+ | * Wörter die aus genau 5 Buchstaben A-Z und a-z bestehen | ||
+ | * Nur der erste Buchstaben darf gross sein, alle anderen müssen klein sein. | ||
+ | * Das Wort muss mindestens einen Vokal enthalten. | ||
+ | * Liste sortieren, doppelte Wörter entfernen. | ||
+ | * Danach bleiben {{kurse: | ||
+ | |||
+ | <hidden Lösungsvorschlag auf der Kommmandozeile> | ||
+ | <code bash> | ||
+ | cat utf8.txt | sed -e s/ß/ss/g | sed -e s/ä/ae/g | sed -e s/ö/oe/g | sed -e s/ü/ue/g | grep -E ' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Wordle-Pro mit regular Expressions ==== | ||
+ | Aus den 6308 Wörtern, was ist die Lösung zu folgenden Wordle-Rätseln? | ||
+ | |||
+ | {{: | ||
+ | <code txt> | ||
+ | [^OENICHKAGL\n]{3}LT | ||
+ | </ | ||
+ | < | ||
+ | {{: | ||
+ | |||
+ | |||
+ | Hinweis: N muss an erster oder vierter Stelle stehen. Mit dem Pipe Zeichen '' | ||
+ | <code txt> | ||
+ | ^NRA[^BOTULKGZA]S|^[^BOTULKGZA]RANS | ||
+ | </ | ||
+ | < | ||
+ | {{: | ||
+ | <code txt> | ||
+ | ^S[^INDZGERPT]O[^INDZGERPT]{2} | ||
+ | </ | ||
+ | < | ||
+ | {{: | ||
+ | |||
+ | <code txt> | ||
+ | ^NE[^KATJOLSHR]R[^KATJOLSHRN]|^[^KATJOLSHR]ENR[^KATJOLSHRN] | ||
+ | </ | ||
+ | ==== Alternativen für HTML, JSON, XML und allg. maschinenlesabare Formate ==== | ||
+ | Um Daten aus HTML, JSON oder XML nachhaltig zu extrahieren/ | ||
+ | * HTML: direkt mit JavaScript und z.B. [[https:// | ||
+ | * JSON: Daten parsen (in irgendeiner Programmiersprache) und direkt dort manipulieren. | ||
+ | * XML: dafür gibt es ebenfalls Parser | ||
+ | Das Problem mit «selbstgestrickten» regular Expressions ist, dass diese halt schnell an ihre Grenzen stossen und zu wenige oder zu viele Resultate liefern. | ||
+ | |||
+ | ===== Weiterführende Links ===== | ||
+ | * Advanced stuff: http:// | ||