Skip to content

Latest commit

 

History

History
150 lines (111 loc) · 8 KB

2024-07-24-HackyHour-22.md

File metadata and controls

150 lines (111 loc) · 8 KB

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/