Python - Reguläre Ausdrücke

Ein regulärer Ausdruck ist eine spezielle Folge von Zeichen, mit deren Hilfe Sie andere Zeichenfolgen oder Sätze von Zeichenfolgen mithilfe einer speziellen Syntax in einem Muster abgleichen oder finden können. Reguläre Ausdrücke sind in der UNIX-Welt weit verbreitet.

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

Wir würden zwei wichtige Funktionen behandeln, die zur Behandlung regulärer Ausdrücke verwendet werden. Aber eine kleine Sache zuerst: Es gibt verschiedene Zeichen, die eine besondere Bedeutung haben würden, wenn sie im regulären Ausdruck verwendet werden. Um Verwirrung beim Umgang mit regulären Ausdrücken zu vermeiden, verwenden wir Raw Strings asr'expression'.

Die Match- Funktion

Diese Funktion versucht, das RE- Muster mit den Zeichenfolgen mit optionalen Flags abzugleichen .

Hier ist die Syntax für diese Funktion -

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

Hier ist die Beschreibung der Parameter -

Sr.Nr. Parameter & Beschreibung
1

pattern

Dies ist der reguläre Ausdruck, der abgeglichen werden soll.

2

string

Dies ist die Zeichenfolge, nach der gesucht wird, um mit dem Muster am Anfang der Zeichenfolge übereinzustimmen.

3

flags

Sie können verschiedene Flags mit bitweisem ODER (|) angeben. Dies sind Modifikatoren, die in der folgenden Tabelle aufgeführt sind.

Die Funktion re.match gibt a zurückmatch Objekt auf Erfolg, Nonebei Ausfall. Wir verwenden die Funktion group (num) oder groups () vonmatch Objekt, um einen übereinstimmenden Ausdruck zu erhalten.

Sr.Nr. Match Object Method & Description
1

group(num=0)

Diese Methode gibt die gesamte Übereinstimmung (oder eine bestimmte Untergruppennummer) zurück.

2

groups()

Diese Methode gibt alle übereinstimmenden Untergruppen in einem Tupel zurück (leer, wenn keine vorhanden waren).

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!!"

Wenn der obige Code ausgeführt wird, erzeugt er folgendes Ergebnis:

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

Die Suche Funktion

Diese Funktion sucht nach dem ersten Auftreten eines RE- Musters innerhalb einer Zeichenfolge mit optionalen Flags .

Hier ist die Syntax für diese Funktion -

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

Hier ist die Beschreibung der Parameter -

Sr.Nr. Parameter & Beschreibung
1

pattern

Dies ist der reguläre Ausdruck, der abgeglichen werden soll.

2

string

Dies ist die Zeichenfolge, die gesucht wird, um mit dem Muster an einer beliebigen Stelle in der Zeichenfolge übereinzustimmen.

3

flags

Sie können verschiedene Flags mit bitweisem ODER (|) angeben. Dies sind Modifikatoren, die in der folgenden Tabelle aufgeführt sind.

Die Forschungsfunktion gibt a zurückmatch Objekt auf Erfolg, nonebei Ausfall. Wir verwenden die Funktion group (num) oder groups () vonmatch Objekt, um einen übereinstimmenden Ausdruck zu erhalten.

Sr.Nr. Übereinstimmende Objektmethoden und Beschreibung
1

group(num=0)

Diese Methode gibt die gesamte Übereinstimmung (oder eine bestimmte Untergruppennummer) zurück.

2

groups()

Diese Methode gibt alle übereinstimmenden Untergruppen in einem Tupel zurück (leer, wenn keine vorhanden waren).

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!!"

Wenn der obige Code ausgeführt wird, erzeugt er folgendes Ergebnis:

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

Matching versus Suche

Python bietet zwei verschiedene primitive Operationen an, die auf regulären Ausdrücken basieren: match sucht nur am Anfang der Zeichenfolge nach einer Übereinstimmung, während search prüft, ob irgendwo in der Zeichenfolge eine Übereinstimmung vorliegt (dies ist standardmäßig bei Perl der Fall).

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!!"

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

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

Suchen und ersetzen

Eins der wichtigsten re Methoden, die reguläre Ausdrücke verwenden, ist sub.

Syntax

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

Diese Methode ersetzt alle Vorkommen des RE- Musters in der Zeichenfolge durch repl und ersetzt alle Vorkommen, sofern nicht max angegeben . Diese Methode gibt eine geänderte Zeichenfolge zurück.

Beispiel

#!/usr/bin/python
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print "Phone Num : ", num

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

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

Modifikatoren für reguläre Ausdrücke: Optionsflags

Literale für reguläre Ausdrücke können einen optionalen Modifikator enthalten, um verschiedene Aspekte des Abgleichs zu steuern. Die Modifikatoren werden als optionales Flag angegeben. Sie können mehrere Modifikatoren mit dem exklusiven ODER (|) bereitstellen, wie zuvor gezeigt, und können durch eines dieser Elemente dargestellt werden:

Sr.Nr. Modifikator & Beschreibung
1

re.I

Führt einen Matching ohne Berücksichtigung der Groß- und Kleinschreibung durch.

2

re.L

Interpretiert Wörter gemäß dem aktuellen Gebietsschema. Diese Interpretation betrifft die alphabetische Gruppe (\ w und \ W) sowie das Wortgrenzenverhalten (\ b und \ B).

3

re.M

Lässt $ mit dem Ende einer Zeile übereinstimmen (nicht nur mit dem Ende der Zeichenfolge) und ^ mit dem Anfang einer beliebigen Zeile (nicht nur mit dem Anfang der Zeichenfolge) übereinstimmen.

4

re.S

Lässt einen Punkt (Punkt) mit einem beliebigen Zeichen übereinstimmen, einschließlich einer neuen Zeile.

5

re.U

Interpretiert Buchstaben gemäß dem Unicode-Zeichensatz. Dieses Flag beeinflusst das Verhalten von \ w, \ W, \ b, \ B.

6

re.X

Ermöglicht die "niedlichere" Syntax regulärer Ausdrücke. Leerzeichen werden ignoriert (außer innerhalb eines Satzes [] oder wenn sie durch einen Backslash maskiert werden) und nicht entkoppeltes # als Kommentarmarker behandelt.

Muster für reguläre Ausdrücke

Mit Ausnahme von Steuerzeichen, (+ ? . * ^ $ ( ) [ ] { } | \)Alle Charaktere stimmen überein. Sie können einem Steuerzeichen entkommen, indem Sie ihm einen Backslash voranstellen.

In der folgenden Tabelle ist die in Python verfügbare Syntax für reguläre Ausdrücke aufgeführt.

Sr.Nr. Muster & Beschreibung
1

^

Entspricht dem Zeilenanfang.

2

$

Entspricht dem Zeilenende.

3

.

Entspricht einem einzelnen Zeichen außer Zeilenumbruch. Mit der Option m können auch Zeilenumbrüche abgeglichen werden.

4

[...]

Entspricht einem einzelnen Zeichen in Klammern.

5

[^...]

Entspricht einem einzelnen Zeichen, das nicht in Klammern steht

6

re*

Entspricht 0 oder mehr Vorkommen des vorhergehenden Ausdrucks.

7

re+

Entspricht 1 oder mehr Vorkommen des vorhergehenden Ausdrucks.

8

re?

Entspricht 0 oder 1 Vorkommen des vorhergehenden Ausdrucks.

9

re{ n}

Entspricht genau n Vorkommen des vorhergehenden Ausdrucks.

10

re{ n,}

Entspricht n oder mehr Vorkommen des vorhergehenden Ausdrucks.

11

re{ n, m}

Entspricht mindestens n und höchstens m Vorkommen des vorhergehenden Ausdrucks.

12

a| b

Entspricht entweder a oder b.

13

(re)

Gruppiert reguläre Ausdrücke und merkt sich übereinstimmenden Text.

14

(?imx)

Schaltet vorübergehend die Optionen i, m oder x innerhalb eines regulären Ausdrucks um. In Klammern ist nur dieser Bereich betroffen.

15

(?-imx)

Schaltet die i-, m- oder x-Optionen innerhalb eines regulären Ausdrucks vorübergehend aus. In Klammern ist nur dieser Bereich betroffen.

16

(?: re)

Gruppiert reguläre Ausdrücke, ohne sich an übereinstimmenden Text zu erinnern.

17

(?imx: re)

Schaltet vorübergehend die Optionen i, m oder x in Klammern um.

18

(?-imx: re)

Schaltet die Optionen i, m oder x vorübergehend in Klammern aus.

19

(?#...)

Kommentar.

20

(?= re)

Gibt die Position anhand eines Musters an. Hat keine Reichweite.

21

(?! re)

Gibt die Position mithilfe der Musterverneinung an. Hat keine Reichweite.

22

(?> re)

Entspricht einem unabhängigen Muster ohne Rückverfolgung.

23

\w

Entspricht Wortzeichen.

24

\W

Entspricht Nichtwortzeichen.

25

\s

Entspricht Leerzeichen. Entspricht [\ t \ n \ r \ f].

26

\S

Entspricht Nicht-Leerzeichen.

27

\d

Entspricht den Ziffern. Entspricht [0-9].

28

\D

Entspricht nicht-stelligen.

29

\A

Entspricht dem Zeichenfolgenanfang.

30

\Z

Entspricht dem Ende der Zeichenfolge. Wenn eine neue Zeile vorhanden ist, stimmt sie kurz vor der neuen Zeile überein.

31

\z

Entspricht dem Ende der Zeichenfolge.

32

\G

Spielpunkt, an dem das letzte Spiel beendet wurde.

33

\b

Entspricht den Wortgrenzen außerhalb der Klammern. Entspricht der Rücktaste (0x08) in Klammern.

34

\B

Entspricht den Nichtwortgrenzen.

35

\n, \t, etc.

Entspricht Zeilenumbrüchen, Wagenrückläufen, Tabulatoren usw.

36

\1...\9

Entspricht dem n-ten gruppierten Unterausdruck.

37

\10

Entspricht dem n-ten gruppierten Unterausdruck, wenn er bereits übereinstimmt. Ansonsten bezieht sich auf die oktale Darstellung eines Zeichencodes.

Beispiele für reguläre Ausdrücke

Wörtliche Zeichen

Sr.Nr. Beispiel & Beschreibung
1

python

Match "Python".

Zeichenklassen

Sr.Nr. Beispiel & Beschreibung
1

[Pp]ython

Entspricht "Python" oder "Python"

2

rub[ye]

Match "Rubin" oder "Rube"

3

[aeiou]

Passen Sie einen beliebigen Kleinbuchstaben an

4

[0-9]

Entspricht einer beliebigen Ziffer. das gleiche wie [0123456789]

5

[a-z]

Passen Sie einen beliebigen ASCII-Kleinbuchstaben an

6

[A-Z]

Passen Sie einen beliebigen ASCII-Großbuchstaben an

7

[a-zA-Z0-9]

Passen Sie zu einem der oben genannten Punkte

8

[^aeiou]

Passen Sie etwas anderes als einen Kleinbuchstaben an

9

[^0-9]

Ordnen Sie etwas anderes als eine Ziffer zu

Sonderzeichenklassen

Sr.Nr. Beispiel & Beschreibung
1

.

Entspricht einem beliebigen Zeichen außer Newline

2

\d

Entspricht einer Ziffer: [0-9]

3

\D

Entspricht einer nichtstelligen Zahl: [^ 0-9]

4

\s

Entspricht einem Leerzeichen: [\ t \ r \ n \ f]

5

\S

Nicht-Leerzeichen abgleichen: [^ \ t \ r \ n \ f]

6

\w

Entspricht einem einzelnen Wortzeichen: [A-Za-z0-9_]

7

\W

Entspricht einem Nichtwortzeichen: [^ A-Za-z0-9_]

Wiederholungsfälle

Sr.Nr. Beispiel & Beschreibung
1

ruby?

Match "rub" oder "ruby": das y ist optional

2

ruby*

Match "rub" plus 0 oder mehr ys

3

ruby+

Match "rub" plus 1 oder mehr ys

4

\d{3}

Passen Sie genau 3 Ziffern an

5

\d{3,}

Entspricht 3 oder mehr Ziffern

6

\d{3,5}

Passen Sie 3, 4 oder 5 Ziffern an

Nongreedy Wiederholung

Dies entspricht der geringsten Anzahl von Wiederholungen -

Sr.Nr. Beispiel & Beschreibung
1

<.*>

Gierige Wiederholung: Entspricht "<python> perl>"

2

<.*?>

Nongreedy: Entspricht "<python>" in "<python> perl>"

Gruppieren mit Klammern

Sr.Nr. Beispiel & Beschreibung
1

\D\d+

Keine Gruppe: + wiederholt \ d

2

(\D\d)+

Gruppiert: + wiederholt \ D \ d Paar

3

([Pp]ython(, )?)+

Match "Python", "Python, Python, Python" usw.

Rückreferenzen

Dies entspricht wieder einer zuvor übereinstimmenden Gruppe -

Sr.Nr. Beispiel & Beschreibung
1

([Pp])ython&\1ails

Passen Sie Python & Eimer oder Python & Eimer an

2

(['"])[^\1]*\1

Einfache oder doppelte Zeichenfolge. \ 1 stimmt mit der 1. Gruppe überein. \ 2 stimmt mit der 2. Gruppe überein usw.

Alternativen

Sr.Nr. Beispiel & Beschreibung
1

python|perl

Match "Python" oder "Perl"

2

rub(y|le))

Match "Rubin" oder "Rubel"

3

Python(!+|\?)

"Python" gefolgt von einem oder mehreren! oder einer?

Anker

Dies muss die Übereinstimmungsposition angeben.

Sr.Nr. Beispiel & Beschreibung
1

^Python

Passen Sie "Python" am Anfang eines Strings oder einer internen Zeile an

2

Python$

Entspricht "Python" am Ende einer Zeichenfolge oder Zeile

3

\APython

Entspricht "Python" am Anfang einer Zeichenfolge

4

Python\Z

Entspricht "Python" am Ende eines Strings

5

\bPython\b

Passen Sie "Python" an einer Wortgrenze an

6

\brub\B

\ B ist eine Nichtwortgrenze: Entspricht "rub" in "rube" und "ruby", aber nicht allein

7

Python(?=!)

Entspricht "Python", wenn ein Ausrufezeichen folgt.

8

Python(?!!)

Entspricht "Python", wenn kein Ausrufezeichen folgt.

Spezielle Syntax mit Klammern

Sr.Nr. Beispiel & Beschreibung
1

R(?#comment)

Entspricht "R". Der Rest ist ein Kommentar

2

R(?i)uby

Groß- und Kleinschreibung wird nicht berücksichtigt, während "uby"

3

R(?i:uby)

Das gleiche wie oben

4

rub(?:y|le))

Nur gruppieren, ohne \ 1 Rückreferenz zu erstellen