Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Python Reguläre Ausdrücke: Praktischer Leitfaden

Einführung

regulärer Ausdruck ist eine spezielle Zeichenfolge, die hilft, andere Strings oder Mengen von Strings mithilfe einer spezialisierten Syntax in einem Muster zu finden oder zu matchen. Reguläre Ausdrücke sind in der UNIX-Welt weit verbreitet.

Das Python-Modul re bietet vollständige Unterstützung für Perl-ähnliche reguläre Ausdrücke. Das Modul löst re.error aus, wenn ein Fehler beim Kompilieren oder Verwenden eines regulären Ausdrucks auftritt.

Wir behandeln zwei wichtige Funktionen. Vorab: Verschiedene Zeichen haben in regulären Ausdrücken spezielle Bedeutung. Um Verwirrung zu vermeiden, verwenden wir Raw Strings als r'expression'.

Die match-Funktion

Versucht, das RE-pattern am Anfang des string mit optionalen flags zu matchen.

re.match(pattern, string, flags=0)

Parameter

Nr.Parameter & Beschreibung
1pattern – Der reguläre Ausdruck zum Matchen.
2string – Der String, der am Anfang nach dem Muster durchsucht wird.
3flags – Modifikatoren per bitweisem OR (|). Siehe Tabelle unten.

re.match gibt bei Erfolg ein Match-Objekt zurück, bei Fehlschlag None. Mit group(num) oder groups() des Match-Objekts erhalten Sie den gematchten Ausdruck.

Nr.Match-Objekt-Methode & Beschreibung
1group(num=0) – Gibt gesamten Match (oder spezifische Untergruppe num) zurück.
2groups() – Gibt alle passenden Untergruppen als Tupel zurück (leer, falls keine).

Beispiel

#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)
if matchObj:
    print("matchObj.group() :", matchObj.group())
    print("matchObj.group(1) :", matchObj.group(1))
    print("matchObj.group(2) :", matchObj.group(2))
else:
    print("No match!!")

Ausgabe:

matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter

Die search-Funktion

Sucht nach dem ersten Vorkommen des RE-pattern irgendwo im string mit optionalen flags.

re.search(pattern, string, flags=0)

Parameter

Nr.Parameter & Beschreibung
1pattern – Der reguläre Ausdruck zum Matchen.
2string – Der String, der irgendwo nach dem Muster durchsucht wird.
3flags – Modifikatoren per bitweisem OR (|).

re.search gibt bei Erfolg ein Match-Objekt zurück, bei Fehlschlag None. Nutzung von group(num) oder groups() analog zu match.

Beispiel

#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)
if searchObj:
    print("searchObj.group() :", searchObj.group())
    print("searchObj.group(1) :", searchObj.group(1))
    print("searchObj.group(2) :", searchObj.group(2))
else:
    print("Nothing found!!")

Ausgabe:

searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter

Matching versus Searching

Python bietet zwei primitive Operationen basierend auf regulären Ausdrücken:

  • match – Prüft nur am Anfang des Strings.
  • search – Prüft irgendwo im String (Perl-Standardverhalten).

Beispiel

#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match(r'dogs', line, re.M | re.I)
if matchObj:
    print("match --> matchObj.group() :", matchObj.group())
else:
    print("No match!!")
searchObj = re.search(r'dogs', line, re.M | re.I)
if searchObj:
    print("search --> searchObj.group() :", searchObj.group())
else:
    print("Nothing found!!")

Ausgabe:

No match!!
search --> searchObj.group() : dogs

Suchen und Ersetzen

Eine der wichtigsten re-Methoden ist sub.

Syntax

re.sub(pattern, repl, string, max=0)

Ersetzt alle Vorkommen des RE-pattern in string mit repl, sofern max nicht begrenzt. Gibt den modifizierten String zurück.

Beispiel

#!/usr/bin/python
import re
phone = "2004-959-559 # This is Phone Number"
# Python-Style-Kommentare löschen
num = re.sub(r'#.*$', "", phone)
print("Phone Num :", num)
# Alles außer Ziffern entfernen
num = re.sub(r'\D', "", phone)
print("Phone Num :", num)

Ausgabe:

Phone Num : 2004-959-559
Phone Num : 2004959559

Reguläre Ausdrucks-Modifikator: Option Flags

Reguläre Ausdrucks-Literale können einen optionalen Modifikator enthalten. Mehrere Modifikatoren per exklusivem OR (|).

Nr.Modifikator & Beschreibung
1re.I – Case-insensitives Matching.
2re.L – Interpretiert Wörter gemäß aktueller Locale. Beeinflusst \w, \W, \b, \B.
3re.M – $ matcht Zeilenende (nicht nur Stringende), ^ matcht Zeilenanfang (nicht nur Stringanfang).
4re.S – Punkt (.) matcht jedes Zeichen, einschließlich Newline.
5re.U – Interpretiert Buchstaben gemäß Unicode-Zeichensatz. Beeinflusst \w, \W, \b, \B.
6re.X – Erlaubt „schönere“ Regex-Syntax. Ignoriert Whitespace (außer in [] oder escaped) und behandelt unescaped # als Kommentar.

Reguläre Ausdrucks-Muster

Ausgenommen Steuerzeichen (+ ? . * ^ $ ( ) [ ] { } | \) matchen alle Zeichen sich selbst. Steuerzeichen können mit Backslash escaped werden.

Folgende Tabelle listet die in Python verfügbare Regex-Syntax:

Nr.Muster & Beschreibung
1^ – Matcht Zeilenanfang.
2$ – Matcht Zeilenende.
3. – Matcht jedes einzelne Zeichen außer Newline. Mit m-Option auch Newline.
4[...] – Matcht einzelnes Zeichen in Klammern.
5[^...] – Matcht einzelnes Zeichen nicht in Klammern.
6re* – 0 oder mehr Vorkommen des vorangehenden Ausdrucks.
7re+ – 1 oder mehr Vorkommen.
8re? – 0 oder 1 Vorkommen.
9re{n} – Genau n Vorkommen.
10re{n,} – n oder mehr Vorkommen.
11re{n,m} – Mindestens n, höchstens m Vorkommen.
12a|b – Matcht entweder a oder b.
13(re) – Gruppiert reguläre Ausdrücke und merkt gematchten Text.
14(?imx) – Schaltet i, m, x Optionen temporär ein. In Klammern nur dort.
15(?-imx) – Schaltet i, m, x Optionen temporär aus. In Klammern nur dort.
16(?:re) – Gruppiert ohne Merken des gematchten Texts.
17(?imx:re) – Schaltet i, m, x in Klammern ein.
18(?-imx:re) – Schaltet i, m, x in Klammern aus.
19(?#...) – Kommentar.
20(?=re) – Position per Muster angeben. Kein Bereich.
21(?!re) – Position per Muster-Negation. Kein Bereich.
22(?>re) – Matcht unabhängiges Muster ohne Backtracking.
23\w – Matcht Wortzeichen.
24\W – Matcht Nicht-Wortzeichen.
25\s – Matcht Whitespace. Äquivalent [\t\n\r\f].
26\S – Matcht Nicht-Whitespace.
27\d – Matcht Ziffern. Äquivalent [0-9].
28\D – Matcht Nicht-Ziffern.
29\A – Matcht Stringanfang.
30\Z – Matcht Stringende. Falls Newline existiert, kurz davor.
31\z – Matcht Stringende.
32\G – Matcht Punkt, wo letzter Match endete.
33\b – Wortgrenzen außerhalb Klammern. Backspace (0x08) innerhalb Klammern.
34\B – Nicht-Wortgrenzen.
35\n, \t, etc. – Newlines, Carriage Returns, Tabs, etc.
36\1...\9 – n-te gruppierte Subexpression.
37\10 – n-te gruppierte Subexpression, falls bereits gematcht; sonst Oktalcode.

Reguläre Ausdrucks-Beispiele

Literalzeichen

Nr.Beispiel & Beschreibung
1python – Matcht „python“.

Zeichenklassen

Nr.Beispiel & Beschreibung
1[Pp]ython – „Python“ oder „python“
2rub[ye] – „ruby“ oder „rube“
3[aeiou] – Beliebiger Kleinbuchstabe-Vokal
4[0-9] – Beliebige Ziffer; gleich [0123456789]
5[a-z] – Beliebiger ASCII-Kleinbuchstabe
6[A-Z] – Beliebiger ASCII-Großbuchstabe
7[a-zA-Z0-9] – Beliebiges der obigen Zeichen
8[^aeiou] – Alles außer Kleinbuchstabe-Vokal
9[^0-9] – Alles außer Ziffer

Spezielle Zeichenklassen

Nr.Beispiel & Beschreibung
1. – Beliebiges Zeichen außer Newline
2\d – Ziffer: [0-9]
3\D – Nicht-Ziffer: [^0-9]
4\s – Whitespace: [ \t\r\n\f]
5\S – Nicht-Whitespace: [^ \t\r\n\f]
6\w – Einzelnes Wortzeichen: [A-Za-z0-9_]
7\W – Nicht-Wortzeichen: [^A-Za-z0-9_]

Wiederholungsfälle

Nr.Beispiel & Beschreibung
1ruby? – „rub“ oder „ruby“: y optional
2ruby* – „rub“ plus 0 oder mehr y
3ruby+ – „rub“ plus 1 oder mehr y
4\d{3} – Genau 3 Ziffern
5\d{3,} – 3 oder mehr Ziffern
6\d{3,5} – 3, 4 oder 5 Ziffern

Nicht-gierige Wiederholung

Matcht die kleinste Anzahl von Wiederholungen:

Nr.Beispiel & Beschreibung
1<.*> – Gierig: matcht „<python>perl>“
2<.*?> – Nicht-gierig: matcht „<python>“ in „<python>perl>“

Gruppierung mit Klammern

Nr.Beispiel & Beschreibung
1\D\d+ – Keine Gruppe: + wiederholt \d
2(\D\d)+ – Gruppiert: + wiederholt \D\d-Paar
3([Pp]ython(, )?)+ – „Python“, „Python, python, python“, etc.

Backreferences

Matcht eine zuvor gematchte Gruppe erneut:

Nr.Beispiel & Beschreibung
1([Pp])ython&\1ails – „python&pails“ oder „Python&Pails“
2(['\"])[^\1]*\1 – Einfach oder doppelt gequoteter String. \1 matcht, was 1. Gruppe matchte. \2 matcht 2. Gruppe, etc.

Alternativen

Nr.Beispiel & Beschreibung
1python|perl – „python“ oder „perl“
2rub(y|le) – „ruby“ oder „ruble“
3Python(!+|\?) – „Python“ gefolgt von einem oder mehreren ! oder einem ?

Anker

Match-Position festlegen:

Nr.Beispiel & Beschreibung
1^Python – „Python“ am Stringanfang oder internen Zeilenanfang
2Python$ – „Python“ am Stringende oder Zeilenende
3\APython – „Python“ am Stringanfang
4Python\Z – „Python“ am Stringende
5\bPython\b – „Python“ an Wortgrenze
6\brub\B – \B ist Nicht-Wortgrenze: „rub“ in „rube“ und „ruby“, aber nicht allein
7Python(?=!) – „Python“, wenn von ! gefolgt
8Python(?!!) – „Python“, wenn nicht von ! gefolgt

Spezielle Syntax mit Klammern

Nr.Beispiel & Beschreibung
1R(?#comment) – Matcht „R“. Rest ist Kommentar
2R(?i)uby – Case-insensitiv beim Matchen von „uby“
3R(?i:uby) – Gleich wie oben
4rub(?:y|le) – Gruppieren ohne \1-Backreference

Python

  1. Python-Datentypen meistern: Praxisleitfaden
  2. Python-Operatoren meistern: Umfassender Leitfaden
  3. Python pass-Statement meistern: Praxisleitfaden
  4. Python-Funktionsargumente meistern: Positional, Keyword & Default-Parameter
  5. Python-Dictionaries meistern: Erstellung, Manipulation und fortgeschrittene Techniken
  6. Python Iteratoren meistern: Funktionsweise und Erstellung eigener Iteratoren
  7. Python Closures erklärt: Wie verschachtelte Funktionen Variablen erfassen
  8. Python Reguläre Ausdrücke (re Modul) – Ein praktischer Leitfaden
  9. Python datetime meistern: Praktischer Leitfaden zu Datumsangaben, Zeiten und Zeitzonen
  10. Java Reguläre Ausdrücke: Pattern Matching mit java.util.regex meistern