Beruflich Dokumente
Kultur Dokumente
Zweite Lösung:
Das Muster 'Schmidt‚ Schmitt oder Schmid gefolgt von einer
Zahl' mit einer vorgegebenen Syntax beschreiben und dann
ein Werkzeug nutzen, das mit Hilfe dieser Syntax Texte
durchsuchen kann.
4
Ein Werkzeug
Wir machen uns das Leben etwas leichter, indem wir in der
Shell eine Funktion defineren:
8
Auswahlen
Warum liefert
plzgrep "?"
(etwa bei macOS) die Fehlermeldung
egrep: repetition-operator operand invalid
Maskiert
21
Maskiert
Mit
cat plzBW.tab | hexdump -C
kann man erkennen, dass die drei Felder Land, PLZ, Ort
jeweils durch Tabulatoren (0x09) getrennt werden.
Das allgemeine Format für jede Zeile kann jetzt auch
präziser mit einer Regexp beschreiben werden:
Baden\-Württemberg\t[0-9]{5}\t.+
Alternativen
Alle Orte, die das Wort 'Baden' oder das Wort 'Württemberg'
enthalten?
[0-9]{5}\t.+(Baden|Württemberg)
Gruppen
Mit den Klammern kann man gruppieren. Gruppen kann
man referenzieren.
Orte, in denen sich ein Paar aufeinanderfolgender
Buchstaben wiederholt.
[0-9]{5}\t.*(.{2})\1
Tipp:
HTML nur in Ausnahmen mit regulären Ausdrücken parsen.
Hier gibt es spezielle HTML-Parser wie JSoup.
Zeichenklassen
Will man nur die Zahl haben, hilft das ‚Lookbehind‘ der Perl-
compatible regular expression (PCRE)
echo "k47" | grep -P -o "(?<=k)[0-9]*"
Markierungen
Nützlich ist oft das Symbol für den Zeilenanfang und das
Zeilenende:
^ Zeilenanfang
$ Zeilenende
import java.util.regex.*;
Pattern.matches("\\w{5}", "regular");
Etwas komplexer
Mit einigen zusätzlichen Objekten arbeitet das folgende
Fragment. Das Ergebnis ist das Gleiche.
Pattern p = Pattern.compile("\\w{5}");
Matcher m = p.matcher("hello");
b = m.matches();
System.out.println(b);
b = Pattern
.compile(".s")
.matcher("as")
.matches();
System.out.println(b);
Treffer anzeigen
Das Objekt vom Typ Matcher kann genutzt werden,
um die Treffer explizit anzuzeigen:
Die
Referenz