generated from HackyHour/template
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
150 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
# Reguläre Ausdrücke | ||
|
||
- Vortrag: Andre Pietsch | ||
|
||
## Was ist das? Definition | ||
- Metasprache zur Musterabfrage in Texten | ||
- Regular Expressions abgekürzt als regex oder regexp | ||
- Folge von Zeichen, die ein Übereinstimmungsmuster in Zeichenketten angeben. Z.B. bestimmte Zeichen oder Wörter. | ||
- Muster werden von Algorithmen zum Suchen und Ersetzen von Zeichenketten oder zur Validierung von Eingaben verwendet. | ||
|
||
XKCD Comic: <http://xkcd.com/208/> | ||
|
||
## Was braucht man zum "matchen" von Text | ||
- Auswahl der zu übereinstimmenden **Zeichen**. | ||
- Festlegung von **Start- und Endpunkten** für den Abgleich. | ||
- Bestimmen der **Anzahl** der Übereinstimmungen. | ||
- Bestimmen der abzugleichenden **Gruppen**. | ||
- **Unabhängigkeit** von einem Betriebssystem | ||
|
||
## Die Grammtik von RegEx: Spezielle Zeichen | ||
|
||
- `\n` Entspricht einem Zeilenumbruch/Zeilenvorschub. | ||
- `\r` Entspricht einem Zeilenrücklauf. | ||
- `\t` Entspricht einem horizontalen Tabulator. | ||
- `\v` Entspricht einem vertikalen Tabulator. | ||
- `\f` Entspricht einem neuen Seiten-/Formularvorschub. | ||
- `\` Umgehung des folgenden Zeichens | ||
|
||
## Die Grammtik von RegEx: Zeichenklassen | ||
|
||
- `.` Passt auf **jedes Zeichen** außer Zeilenumbruch. | ||
- `\s` Passt auf alle **Leerzeichen**. [“ “, \t, \r, \n, \v und \f] | ||
- `\S` Passt auf alle Zeichen **Nicht-Leerzeichen**. [alle Zeichen außer „ “, \t, \r, \n, \v und \f] | ||
- `\d` Passt auf alle **Ziffern**. [0-9] | ||
- `\D` Passt auf alle **Nicht-Ziffern**. [alle Zeichen außer 0-9] | ||
- `\w` Stimmt mit allen **Wortzeichen** überein. [A-Z, a-z, 0-9 und _] | ||
- `\W` Trifft auf alle **Nicht-Wort-Zeichen** zu. [alle Zeichen außer A-Z, a-z, 0-9 und _] | ||
|
||
## Die Grammtik von RegEx: Quantifizierer | ||
|
||
- `?` Entspricht 0 oder 1 Vorkommen des vorangehenden Elements. [`colou?r` entspricht sowohl `color` als auch `colour`] | ||
- `*` Passt auf 0 oder mehr Vorkommen des vorangehenden Elements. [`ab*c` entspricht sowohl `ac`, `abc`, `abbc` usw.] | ||
- `*?` Entspricht keinem oder mehreren Vorkommen des vorangehenden Elements, aber **non-greedy**. | ||
- `+` Entspricht einem oder mehreren Vorkommen des vorangehenden Elements. (`ab+c` passt sowohl auf `abc`, `abbc` usw., aber nicht auf `ac`) | ||
- `+?` Entspricht einem oder mehreren Vorkommen des vorangehenden Elements, aber **non-greedy**. | ||
- `{n}` Trifft genau `n`-mal auf das vorhergehende Element zu. | ||
- `{min,}` Entspricht dem vorangehenden Element mindestens bis zur Zahl von `min` oder mehr. | ||
- `{,max}` Entspricht dem vorangehenden Element bis zur Zahl von `max`. | ||
- `{min,max}` Entspricht dem vorangehenden Element mindestens `min`-mal, aber höchstens `max`-mal | ||
|
||
** Greedy Matching /Gieriger Abgleich | ||
Die Wiederholungszeichen `*` und `+` führen dazu dass die größtmögliche Zeichenkette gesucht wird. Daher bezeichnet diese Zeichen als "gierig"/"greedy". | ||
|
||
Beispiel: | ||
`F.+,` matches “From here, to there,” in `From here, to there, to everywhere` | ||
|
||
`F.+?,` matches “From here,” in `From here, to there, to everywhere` | ||
|
||
|
||
## Die Grammtik von RegEx: Bereiche | ||
- `[abc]` Passt auf ein **einzelnes Zeichen**, das sich innerhalb der Klammern befindet. (in diesem Beispiel `a` oder `b` oder `c`) | ||
- `[^abc]` Passt auf ein **einzelnes Zeichen**, das nicht in den Klammern enthalten ist. [in diesem Beispiel alles außer `a` oder `b` oder `c`] | ||
- `[A-Z]` Passt auf ein **einzelnes Zeichen** im Bereich von A bis Z. [`A` oder `B` oder ... oder `Z`] | ||
- `[a-z]` Passt auf ein **einzelnes Zeichen** im Bereich von a bis z. [`a` oder `b` oder ... oder `z`] | ||
- `[0-9]` Passt auf ein **einzelnes Zeichen** im Bereich von 0 bis 9. [`0` oder `1` oder ... oder `9`] | ||
- `[A-Za-z0-9]` Passt auf ein einzelnes Zeichen im Bereich von **A bis Z, a bis z oder 0 bis 9**. [`A` oder `B` oder ... oder `a` oder `b` oder ... oder `0` oder `1` oder ... oder `9`] | ||
|
||
## Die Grammtik von RegEx: Anker | ||
|
||
- `^` Matched den Anfang einer Zeichenkette und auf jede neue Zeile. | ||
- `$` Matched auf das Ende einer Zeichenkette und auf jede neue Zeile. | ||
- `\b` Stimmt mit einer Wortgrenze überein. [`\bcat\b` passt zu `cat` als einzelnes Wort, aber nicht in `concatination`] | ||
- `\B` Passt auf eine Nicht-Wort-Grenze. [`\Bcat\B` passt auf „cat“ in `concatination`, aber nicht als einzelnes Wort `cat`] | ||
- `\G` Entspricht dem Startpunkt einer Suche und der Position, an der die vorherige erfolgreiche Suche endete. Nützlich für Iterationen. | ||
|
||
## Die Grammtik von RegEx: Gruppen | ||
|
||
- `(a|b)` Entspricht a **oder** b. (Boolesches ODER). | ||
- `(…)` Gibt eine erfassende Gruppe/einen erfassenden Ausdruck an (ersetzen Sie „...“ durch einen regulären Ausdruck). | ||
- `(?:…)` Bezeichnet eine passive, nicht erfassende Gruppe/einen nicht erfassenden Ausdruck (ersetzen Sie „...“ durch einen regulären Ausdruck). | ||
- `$n | \n` **Rückverweis** auf die **n**-te erfassende Gruppe. | ||
- `$2 | \2` **Rückverweis** auf die **2**. erfassende Gruppe. [„xyz“ in `^(abc)(xyz)$`] | ||
- `$1 | \1` **Rückverweis** auf die **1**. Erfassungsgruppe. [„xyz“ in `^(?:abc)(xyz)$`] | ||
|
||
|
||
## Die Grammtik von RegEx: Assertions | ||
|
||
- `?=` **Positive Lookahead** [`\d(?=abc)` findet eine Ziffer, die direkt von „abc“ gefolgt wird, z. B. `1` in „1abc2abc“] | ||
- `?!` **Negative Lookahead** [`\d(?!abc)` findet eine Ziffer, die nicht direkt von „abc“ gefolgt wird, z. B. `2` in „1abc2def“] | ||
- `?<=` **Positive Lookbehinds** [`(?<=abc)\d` findet eine Ziffer, der ein „abc“ direkt vorausgeht, z. B. 1 in „abc1abc2“] | ||
- `?<!` **Negative Lookbehinds** [`(?<!abc)\d` findet eine Ziffer, die nicht direkt vor „abc“ steht, z. B. 2 in „abc1def2“] | ||
|
||
|
||
## Die Grammtik von RegEx: POSIX Klassen | ||
|
||
- `[:upper:]` Entspricht allen **Großbuchstaben** (entspricht `[A-Z]`). | ||
- `[:lower:]` Entspricht allen **Kleinbuchstaben** (entspricht `[a-z]`). | ||
- `[:alpha:]` Entspricht allen **Buchstaben** (entspricht `[A-Za-z]`). | ||
- `[:digit:]` Entspricht allen **Ziffern** (entspricht `[0-9]`). | ||
- `[:alnum:]` Entspricht allen **Buchstaben** und **Ziffern** (entspricht `[A-Za-z0-9]`). | ||
- `[:punct:]` Entspricht allen **Interpunktionszeichen**. [zum Beispiel `!`, `“`, `#`, `$`, `%`, `&`, `*`, `+`, `-`, usw.] | ||
- `[:blank:]` Passt auf **Leerzeichen** (` `)und Tabulator (`\t`). | ||
- `[:space:]` Passt auf alle **nicht sichtbaren Zeichen**. [`\t`, `\r`, `\n`, `\v` und `\f`] | ||
- `[:word:]` Passt auf alle **Wortzeichen** (entspricht `\w`). | ||
|
||
## Übungen | ||
|
||
Websites mit guten Übungen. | ||
RegEx Golf - <https://alf.nu/RegexGolf> | ||
RegEx Sketch Engine (Exercises) - <https://regex.sketchengine.eu/basic-exercises.html> | ||
RegEx Tutorials (Exercises) - <http://regextutorials.com/excercise.html> | ||
|
||
## Wo kann ich reguläre Ausdrücke bei der täglichen Arbeit verwenden? | ||
|
||
- MS Word | ||
- Suchen und Ersetzen als abgespeckte Version von regulären Ausdrücken mit einer Menge seltsamer oder anderer Syntax als der gerade vorgestellten Syntax. | ||
- MS Excel | ||
- Funktionen: REGEXTEST, REGEXEXTRACT und REGEXREPLACE, aber nur mit Microsoft 365 und als Beta-Funktionen | ||
- Browser-Suche (über Addons) z.B Brave | ||
- Batch-Umbenennungs-Tools z.B Advanced Renamer | ||
- Apps für Notizen z.B Obsidian | ||
|
||
## Wie benutzt man reguläre Ausdrücke mit Python? | ||
|
||
**Python-Pandas** | ||
Ein Beispiel: Erstellen einer Reihe neuer Spalten aus einer gegebenen Spalte unter Verwendung regulärer Ausdrücke mit | ||
|
||
`df['column'].str.extract('regular_expression')` | ||
|
||
**Python re** | ||
Modul für die Arbeit mit regulären Ausdrücken in Python, das Ihnen einen variablen Satz von Funktionen für die Arbeit mit Text in Python bietet. Es verwendet die vorgestellte Syntax. | ||
|
||
## Das Python re-Modul | ||
|
||
`importieren re` | ||
Importiert das re-Modul. | ||
|
||
`re.search()` | ||
Prüft, ob eine Zeichenkette mit einem regulären Ausdruck übereinstimmt, ähnlich wie die Methode `find()` für Zeichenketten. Sie gibt True oder False zurück. | ||
|
||
`re.findall()` | ||
Extrahiert Teile einer Zeichenkette, die mit einem regulären Ausdruck übereinstimmen. Gibt eine Liste von Strings oder Tupeln zurück. | ||
|
||
## Nützliche Links | ||
|
||
RegEx Cheatsheet on Cheatography.com: <https://cheatography.com/davechild/cheat-sheets/regular-expressions/> | ||
RegEx Golf <https://alf.nu/RegexGolf> | ||
RegEx Sketch Engine <https://regex.sketchengine.eu/index.html> | ||
RegEx Tutorials <http://regextutorials.com/> | ||
regex101 <https://regex101.com/> |