Python RegEx

Table of Contents

 

In diesem Tutorial lernen Sie reguläre Ausdrücke (RegEx) kennen und verwenden das re-Modul von Python, um mit RegEx zu arbeiten (mit Hilfe von Beispielen).

 

A Regular Expression (RegEx) ist eine Folge von Zeichen, die ein Suchmuster definiert. Zum Beispiel,

^a...s$

 

 

Der obige Code definiert ein RegEx Muster. Das Muster ist: eine beliebige Zeichenkette mit fünf Buchstaben, die mit a und endend mith s.

Ein mit RegEx definiertes Muster kann zum Abgleich mit einer Zeichenkette verwendet werden.

 

Expression String Matched?
^a...s$ abs No match
alias Match
abyss Match
Alias No match
An abacus No match

 

 

Python hat ein Modul namens re um mit RegEx zu arbeiten. Hier ist ein Beispiel:

import re

pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)

if result:
  print("Search successful.")
else:
  print("Search unsuccessful.")

 

 

Hier haben wir re.match() Funktion zum Suchen pattern innerhalb der test_string. Die Methode gibt ein Match-Objekt zurück, wenn die Suche erfolgreich war. Wenn nicht, kehrt es zurück None.

 


 

Es gibt weitere verschiedene Funktionen, die in der re Modul, um mit RegEx zu arbeiten. Bevor wir das erforschen, wollen wir etwas über reguläre Ausdrücke selbst lernen.

Wenn Sie die Grundlagen von RegEx bereits kennen, springen Sie zu Python RegEx.


 

 

Specify Pattern Using RegEx

 

Um reguläre Ausdrücke zu spezifizieren, werden Meta-Zeichen verwendet. Im obigen Beispiel, ^ und $ sind Metazeichen.

 


 

MetaCharacters

 

Metazeichen sind Zeichen, die von einer RegEx-Engine auf eine besondere Weise interpretiert werden. Hier finden Sie eine Liste von Metazeichen:

 

[] . ^ $ * + ? {} () \ |

 


 

[] – Square brackets

Die eckigen Klammern geben eine Gruppe von Zeichen an, die Sie abgleichen möchten.

 

Expression String Matched?
[abc] a 1 match
ac 2 matches
Hey Jude No match
abc de ca 5 matches

 

 

Hier, [abc] passt, wenn die gesuchte Zeichenkette eines der folgenden Elemente enthält a, b or c.

 

Sie können auch einen Bereich von Zeichen angeben, indem Sie - innerhalb eckiger Klammern.

 

  • [a-e] ist das Gleiche wie [abcde].
  • [1-4] ist das Gleiche wie[1234].
  • [0-39] ist das Gleiche wie [01239].

 

Sie können den Zeichensatz mit Caret ergänzen (invertieren). ^ symbol am Anfang einer eckigen Klammer.

 

  • [^abc] bedeutet ein beliebiges Zeichen außer a or b or c.
  • [^0-9] bedeutet ein beliebiges nicht-ziffriges Zeichen.

 


 

.Period

 

Ein Punkt passt zu jedem einzelnen Zeichen (außer Zeilenumbruch '\n').

 

Expression String Matched?
.. a No match
ac 1 match
acd 1 match
acde 2 matches (contains 4 characters)

 


 

^Caret

 

Das Caret symbol ^ wird verwendet, um zu prüfen, ob eine Zeichenkette startet mit einen bestimmten Charakter.

 

Expression String Matched?
^a a 1 match
abc 1 match
bac No match
^ab abc 1 match
acb No match (starts with a but not followed by b)

 


 

$Dollar

 

Das Dollar Symbol $ wird verwendet, um zu überprüfen, ob ein String endet mit einen bestimmten Charakter.

 

Expression String Matched?
a$ a 1 match
formula 1 match
cab No match

 


 

*Star

 

Das Stern symbol * Streichhölzer null oder mehr Vorkommen des ihm hinterlassenen Musters.

 

Expression String Matched?
ma*n mn 1 match
man 1 match
maaan 1 match
main No match (a is not followed by n)
woman 1 match

 


 

+Plus

 

Dasplus symbol + streichhölzer ein oder mehrere Vorkommen des ihm hinterlassenen Musters.

 

Expression String Matched?
ma+n mn No match (no a character)
man 1 match
maaan 1 match
main No match (a is not followed by n)
woman 1 match

 


 

 

?Question Mark

 

Das Fragezeichen Symbol ? streichhölzer Null oder ein Vorkommen des ihm hinterlassenen Musters.

 

Expression String Matched?
ma?n mn 1 match
man 1 match
maaan No match (more than one a character)
main No match (a is not followed by n)
woman 1 match

 


 

{}Braces

 

Betrachten Sie diesen Code: {n,m}. Dies bedeutet mindestens n, und allenfalls m Wiederholungen des es überlassenen Musters.

 

Expression String Matched?
a{2,3} abc dat No match
abc daat 1 match (at daat)
aabc daaat 2 matches (at aabc and daaat)
aabc daaaat 2 matches (at aabc and daaaat)

 

 

Lassen Sie uns ein weiteres Beispiel ausprobieren. Dieses RegEx[0-9]{2, 4} stimmt mit mindestens 2 Ziffern, aber nicht mehr als 4 Ziffern überein

 

Expression String Matched?
[0-9]{2,4} ab123csde 1 match (match at ab123csde)
12 and 345673 3 matches (12, 3456, 73)
1 and 2 No match

 


 

|Alternation

 

Vertikaler Balken | wird zur Abwechslung verwendet (or operator).

 

Expression String Matched?
a|b cde No match
ade 1 match (match at ade)
acdbea 3 matches (at acdbea)

 

 

Hier, a|b passt auf jede Zeichenkette, die entweder a oder b

 


 

()Group

 

Parenthese () wird verwendet, um Untermuster zu gruppieren. Zum Beispiel, (a|b|c)xz Übereinstimmung mit einer beliebigen Zeichenfolge, die entweder a oder b oder c gefolgt von xz

 

Expression String Matched?
(a|b|c)xz ab xz No match
abxz 1 match (match at abxz)
axz cabxz 2 matches (at axzbc cabxz)

 


 

\Backslash

 

Backlash \wird verwendet, um verschiedene Zeichen zu escapen, einschließlich aller Metazeichen. Zum Beispiel,

 

\$a Übereinstimmung, wenn eine Zeichenfolge enthält $ gefolgt von a. Hier, $ wird von einer RegEx-Engine nicht auf besondere Weise interpretiert.

 

Wenn Sie unsicher sind, ob ein Zeichen eine besondere Bedeutung hat oder nicht, können Sie die \ davor platzieren. Dadurch wird sichergestellt, dass das Zeichen nicht besonders behandelt wird.

 


Special Sequences

Spezielle Sequenzen machen häufig verwendete Muster einfacher zu schreiben. Hier finden Sie eine Liste von speziellen Sequenzen:
\A – Stimmt überein, wenn die angegebenen Zeichen am Anfang einer Zeichenkette stehen.

 

Expression String Matched?
\Athe the sun Match
In the sun No match

 

\b – Stimmt überein, wenn die angegebenen Zeichen am Anfang oder am Ende eines Wortes stehen.

 

Expression String Matched?
\bfoo football Match
a football Match
afootball No match
foo\b the foo Match
the afoo test Match
the afootest No match

 


 

\B – Gegenteil von \b. Stimmt überein, wenn die angegebenen Zeichen . sind nicht am Anfang oder Ende eines Wortes.

 

Expression String Matched?
\Bfoo football No match
a football No match
afootball Match
foo\B the foo No match
the afoo test No match
the afootest Match

 


 

\d – Entspricht einer beliebigen Dezimalstelle. Äquivalent zu [0-9]

 

Expression String Matched?
\d 12abc3 3 matches (at 12abc3)
Python No match

 


 

\D – Passt auf jede nicht dezimale Ziffer. Äquivalent zu [^0-9]

 

Expression String Matched?
\D 1ab34"50 3 matches (at 1ab34"50)
1345 No match

 


 

\s – Streichhölzer, wenn eine Zeichenkette ein beliebiges Leerzeichen enthält. Äquivalent zu [ \t\n\r\f\v].

 

Expression String Matched?
\s Python RegEx 1 match
PythonRegEx No match

 


 

\S – Streichhölzer wenn eine Zeichenkette ein beliebiges Nicht-Leerzeichen enthält. Äquivalent zu [^ \t\n\r\f\v].

 

Expression String Matched?
\S a b 2 matches (at a b)
    No match

 


 

\w – Passt auf jedes alphanumerische Zeichen (Ziffern und Alphabete). Äquivalent zu [a-zA-Z0-9_]. Übrigens, der Unterstrich _ wird ebenfalls als alphanumerisches Zeichen betrachtet.

 

Expression String Matched?
\w 12&": ;c 3 matches (at 12&": ;c)
%"> ! No match

 


 

\W – Passt auf jedes nicht-alphanumerische Zeichen. Äquivalent zu [^a-zA-Z0-9_]

 

Expression String Matched?
\W 1a2%c 1 match (at 1a2%c)
Python No match

 


 

\Z – Stimmt überein, wenn die angegebenen Zeichen am Ende einer Zeichenkette stehen.

 

Expression String Matched?
Python\Z I like Python 1 match
I like Python Programming No match
Python is fun. No match

 


 

Tipp

Zum Erstellen und Testen von regulären Ausdrücken können Sie RegEx-Tester-Tools verwenden, z. B. regex101. Dieses Tool hilft Ihnen nicht nur beim Erstellen von regulären Ausdrücken, sondern auch beim Erlernen derselben.

Nachdem Sie nun die Grundlagen von RegEx verstanden haben, lassen Sie uns besprechen, wie Sie RegEx in Ihrem Python-Code verwenden können.

 


 

 

Python RegEx

 

Python hat ein Modul namens re mit regulären Ausdrücken zu arbeiten. Um es zu verwenden, müssen wir das Modul importieren.

import re

 

Das Modul definiert mehrere Funktionen und Konstanten für die Arbeit mit RegEx.


 

re.findall()

 

The re.findall() Die Methode gibt eine Liste von Zeichenketten zurück, die alle Übereinstimmungen enthält.

 


 

Beispiel 1: re.findall()

 

# Programm zum Extrahieren von Zahlen aus einer Zeichenfolge

import re

string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'

result = re.findall(pattern, string) 
print(result)

# Output: ['12', '89', '34']

 

Wenn das Muster nicht gefunden wird, re.findall() gibt eine leere Liste zurück.

 


 

re.split()

 

Die re.split Methode teilt die Zeichenfolge auf, wenn eine Übereinstimmung vorliegt, und gibt eine Liste von Zeichenfolgen zurück, bei denen die Aufteilungen aufgetreten sind.

 


 

 

Beispiel 2: re.split()

 

import re

string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'

result = re.split(pattern, string) 
print(result)

# Output: ['Twelve:', ' Eighty nine:', '.']

 

 

Wenn das Muster nicht gefunden wird, re.split() gibt eine Liste zurück, die die ursprüngliche Zeichenkette enthält.

 


 

Sie können passieren maxsplit Argument zum re.split() method. Das ist die maximale Anzahl von Splits, die auftreten werden.

 

import re

string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'

# maxsplit = 1
# split only at the first occurrence
result = re.split(pattern, string, 1) 
print(result)

# Output: ['Twelve:', ' Eighty nine:89 Nine:9.']

 

Übrigens: Der Standardwert von maxsplit ist 0; das heißt alle möglichen Aufteilungen.

 


 

re.sub()

 

Die Syntax von re.sub() ist:

re.sub(pattern, replace, string)

 

Die Methode gibt einen String zurück, in dem übereinstimmende Vorkommen durch den Inhalt von . ersetzt werden replace variable.

 


 

Beispiel 3: re.sub()

 

# Programm zum Entfernen aller Leerzeichen
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.sub(pattern, replace, string) 
print(new_string)

# Output: abc12de23f456

 

Wenn das Muster nicht gefunden wird, re.sub() gibt die ursprüngliche Zeichenfolge zurück

 


 

Sie können passieren count als vierten Parameter an die re.sub() method. Wenn es weggelassen wird, ergibt sich 0. Dadurch werden alle Vorkommen ersetzt.

 

import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'
replace = ''

new_string = re.sub(r'\s+', replace, string, 1) 
print(new_string)

# Output:
# abc12de 23
# f45 6

 


 

 

re.subn()

 

Dasre.subn() ist ähnlich wie re.sub() außer es gibt ein Tupel von 2 Elementen zurück, das die neue Zeichenfolge und die Anzahl der vorgenommenen Ersetzungen enthält.

 


 

Beispiel 4: re.subn()

 

# Programm zum Entfernen aller Whitespaces
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.subn(pattern, replace, string) 
print(new_string)

# Output: ('abc12de23f456', 4)

 


 

re.search()

 

Die re.search() Methode nimmt zwei Argumente entgegen: ein Muster und eine Zeichenkette. Die Methode sucht nach der ersten Stelle, an der das RegEx-Muster eine Übereinstimmung mit der Zeichenkette ergibt

 

Wenn die Suche erfolgreich ist, re.search() gibt ein Übereinstimmungsobjekt zurück; wenn nicht, kehrt es zurück None.

match = re.search(pattern, str)

 


 

 

Beispiel 5: re.search()

import re

string = "Python macht Freude"

# prüfen, ob 'Python' am Anfang steht
match = re.search('\APython', string)

if match:
  print("Muster innerhalb der Zeichenkette gefunden")
else:
  print("Muster nicht gefunden")  

# Output: Muster innerhalb der Zeichenkette gefunden

 

 

Hier, match enthält ein Match-Objekt.

 


 

 

Match object

 

Sie können Methoden und Attribute eines Match-Objekts mit der Funktion dir() abrufen.

Einige der am häufigsten verwendeten Methoden und Attribute von Match-Objekten sind:

 


 

match.group()

 

Die group() Methode gibt den Teil der Zeichenkette zurück, in dem es eine Übereinstimmung gibt.

Beispiel 6: Match object

 

import re

string = '39801 356, 2102 1111'

# Dreistellige Zahl gefolgt von einem Leerzeichen gefolgt von einer zweistelligen Zahl
pattern = '(\d{3}) (\d{2})'

# match-Variable enthält ein Match-Objekt.
match = re.search(pattern, string) 

if match:
  print(match.group())
else:
  print("Muster nicht gefunden")

# Output: 801 35

 

Hier, match Variable enthält ein Match-Objekt.

 

Unser Muster (\d{3}) (\d{2}) hat zwei Untergruppen (\d{3}) und (\d{2}). Sie können den Teil der Zeichenkette dieser eingeklammerten Untergruppen erhalten. So geht’s:

 

>>> match.group(1)
'801'

>>> match.group(2)
'35'
>>> match.group(1, 2)
('801', '35')

>>> match.groups()
('801', '35')

 


 

match.start(), match.end() and match.span()

 

Die start() Funktion gibt den Index des Anfangs der übereinstimmenden Teilzeichenkette zurück. Similarly, end() gibt den Endindex der übereinstimmenden Teilzeichenkette zurück.

 

>>> match.start()
2
>>> match.end()
8

 

Die span() Funktion gibt ein Tupel zurück, das den Start- und Endindex des übereinstimmenden Teils enth

 

>>> match.span()
(2, 8)

 


 

match.re and match.string

 

Dasre Attribut eines übereinstimmenden Objekts gibt ein Objekt des regulären Ausdrucks zurück. Ähnlich, string Attribut gibt den übergebenen String zurück.

 

>>> match.re
re.compile('(\\d{3}) (\\d{2})')

>>> match.string
'39801 356, 2102 1111'

 

 


 

Wir haben alle häufig verwendeten Methoden abgedeckt, die in der re Modul. Wenn Sie mehr erfahren möchten, besuchen Sie Python 3 re modul.

 


 

 

Using r prefix before RegEx

 

 

When r or R Präfix vor einem regulären Ausdruck verwendet wird, bedeutet es rohe Zeichenfolge. Zum Beispiel, '\n' ist eine neue Zeile, während r'\n' bedeutet zwei Zeichen: ein Backslash \ gefolgt vonn.

 

Backlash \ wird verwendet, um verschiedene Zeichen zu escapen, einschließlich aller Metazeichen. Allerdings ist die Verwendung von r präfix macht \ wie ein normales Zeichen behandeln.

 


 

 

Beispiel 7: Raw string using r prefix

 

import re

string = '\n and \r are escape sequences.'

result = re.findall(r'[\n\r]', string) 
print(result)

# Output: ['\n', '\r']