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

Python-RegEx

Python RegEx

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).

Eine Reg ular Ex pression (RegEx) ist eine Zeichenfolge, die ein Suchmuster definiert. Zum Beispiel

^a...s$

Der obige Code definiert ein RegEx-Muster. Das Muster ist:jede Zeichenfolge aus fünf Buchstaben, die mit a beginnt und endet mit s .

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

Ausdruck String Übereinstimmung?
^a...s$ abs Keine Übereinstimmung
alias Übereinstimmung
abyss Übereinstimmung
Alias Keine Übereinstimmung
An abacus Keine Übereinstimmung

Python hat ein Modul namens re 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() verwendet Funktion, um Muster zu suchen innerhalb der test_string . Die Methode gibt ein Übereinstimmungsobjekt zurück, wenn die Suche erfolgreich ist. Wenn nicht, wird None zurückgegeben .


Es gibt mehrere andere Funktionen, die in re definiert sind Modul, um mit RegEx zu arbeiten. Bevor wir uns damit befassen, wollen wir etwas über reguläre Ausdrücke selbst lernen.

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


Muster mit RegEx angeben

Um reguläre Ausdrücke anzugeben, werden Metazeichen verwendet. Im obigen Beispiel ^ und $ sind Metazeichen.


Metazeichen

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

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


[] - Eckige Klammern

Eckige Klammern geben eine Reihe von Zeichen an, die Sie abgleichen möchten.

Ausdruck String Übereinstimmung?
[abc] a 1 Übereinstimmung
ac 2 Übereinstimmungen
Hey Jude Keine Übereinstimmung
abc de ca 5 Übereinstimmungen

Hier, [abc] stimmt überein, wenn die zu vergleichende Zeichenfolge einen der a enthält , b oder c .

Sie können auch einen Zeichenbereich mit - angeben in eckigen Klammern.

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


. - Punkt

Ein Punkt entspricht jedem einzelnen Zeichen (außer Newline '\n' ).

Ausdruck String Übereinstimmung?
.. a Keine Übereinstimmung
ac 1 Übereinstimmung
acd 1 Übereinstimmung
acde 2 Übereinstimmungen (enthält 4 Zeichen)

^ - Pfeil

Das Caret-Symbol ^ wird verwendet, um zu prüfen, ob eine Zeichenkette mit beginnt ein bestimmtes Zeichen.

Ausdruck String Übereinstimmung?
^a a 1 Übereinstimmung
abc 1 Übereinstimmung
bac Keine Übereinstimmung
^ab abc 1 Übereinstimmung
acb Keine Übereinstimmung (beginnt mit a aber nicht gefolgt von b )

$ - Dollar

Das Dollarzeichen $ wird verwendet, um zu prüfen, ob eine Zeichenkette mit endet ein bestimmtes Zeichen.

Ausdruck String Übereinstimmung?
a$ a 1 Übereinstimmung
formula 1 Übereinstimmung
cab Keine Übereinstimmung

* - Stern

Das Sternsymbol * stimmt mit null oder mehr Vorkommen überein des ihm überlassenen Musters.

Ausdruck String Übereinstimmung?
ma*n mn 1 Übereinstimmung
man 1 Übereinstimmung
maaan 1 Übereinstimmung
main Keine Übereinstimmung (a folgt nicht n )
woman 1 Übereinstimmung

+ - Plus

Das Pluszeichen + stimmt mit einem oder mehreren Vorkommen überein des ihm überlassenen Musters.

Ausdruck String Übereinstimmung?
ma+n mn Keine Übereinstimmung (kein a Zeichen)
man 1 Übereinstimmung
maaan 1 Übereinstimmung
main Keine Übereinstimmung (auf a folgt kein n)
woman 1 Übereinstimmung

? - Fragezeichen

Das Fragezeichensymbol ? entspricht null oder einem Vorkommen des ihm überlassenen Musters.

Ausdruck String Übereinstimmung?
ma?n mn 1 Übereinstimmung
man 1 Übereinstimmung
maaan Keine Übereinstimmung (mehr als ein a Zeichen)
main Keine Übereinstimmung (auf a folgt kein n)
woman 1 Übereinstimmung

{} - Klammern

Betrachten Sie diesen Code:{n,m} . Das bedeutet mindestens n , und höchstens m Wiederholungen des ihm überlassenen Musters.

Ausdruck String Übereinstimmung?
a{2,3} abc dat Keine Übereinstimmung
abc daat 1 Übereinstimmung (bei daat )
aabc daaat 2 Übereinstimmungen (bei aabc und daaat )
aabc daaaat 2 Übereinstimmungen (bei aabc und daaaat )

Versuchen wir es mit einem weiteren Beispiel. Dieser RegEx [0-9]{2, 4} stimmt mit mindestens 2 Ziffern, aber nicht mehr als 4 Ziffern überein

Ausdruck String Übereinstimmung?
[0-9]{2,4} ab123csde 1 Übereinstimmung (Übereinstimmung bei ab123csde )
12 and 345673 3 Übereinstimmungen (12 , 3456 , 73 )
1 and 2 Keine Übereinstimmung

| - Alternative

Vertikaler Strich | wird für die Alternierung verwendet (or Betreiber).

Ausdruck String Übereinstimmung?
a|b cde Keine Übereinstimmung
ade 1 Übereinstimmung (Übereinstimmung bei ade )
acdbea 3 Übereinstimmungen (bei acdbea )

Hier, a|b jede Zeichenfolge finden, die entweder a enthält oder b


() - Gruppe

Klammern () wird verwendet, um Untermuster zu gruppieren. Beispiel:(a|b|c)xz Übereinstimmung mit jeder Zeichenfolge, die mit a übereinstimmt oder b oder c gefolgt von xz

Ausdruck String Übereinstimmung?
(a|b|c)xz ab xz Keine Übereinstimmung
abxz 1 Übereinstimmung (Übereinstimmung bei abxz )
axz cabxz 2 Übereinstimmungen (bei axzbc cabxz )

\ - Backslash

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

\$a übereinstimmen, wenn ein String $ enthält gefolgt von a . Hier, $ wird von einer RegEx-Engine nicht auf besondere Weise interpretiert.

Wenn Sie sich nicht sicher sind, ob ein Zeichen eine besondere Bedeutung hat oder nicht, können Sie \ eingeben vor. Dadurch wird sichergestellt, dass das Zeichen nicht besonders behandelt wird.


Spezielle Sequenzen

Spezielle Sequenzen erleichtern das Schreiben häufig verwendeter Muster. Hier ist eine Liste spezieller Sequenzen:

\A - Stimmt überein, wenn die angegebenen Zeichen am Anfang einer Zeichenfolge stehen.

Ausdruck String Übereinstimmung?
\Athe the sun Übereinstimmung
In the sun Keine Übereinstimmung

\b - Entspricht, wenn die angegebenen Zeichen am Anfang oder am Ende eines Wortes stehen.

Ausdruck String Übereinstimmung?
\bfoo football Übereinstimmung
a football Übereinstimmung
afootball Keine Übereinstimmung
foo\b the foo Übereinstimmung
the afoo test Übereinstimmung
the afootest Keine Übereinstimmung

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

Ausdruck String Übereinstimmung?
\Bfoo football Keine Übereinstimmung
a football Keine Übereinstimmung
afootball Übereinstimmung
foo\B the foo Keine Übereinstimmung
the afoo test Keine Übereinstimmung
the afootest Übereinstimmung

\d - Stimmt mit jeder Dezimalziffer überein. Äquivalent zu [0-9]

Ausdruck String Übereinstimmung?
\d 12abc3 3 Übereinstimmungen (bei 12abc3 )
Python Keine Übereinstimmung

\D - Stimmt mit jeder Nicht-Dezimalziffer überein. Entspricht [^0-9]

Ausdruck String Übereinstimmung?
\D 1ab34"50 3 Übereinstimmungen (bei 1ab34"50 )
1345 Keine Übereinstimmung

\s - Übereinstimmungen, bei denen eine Zeichenfolge ein beliebiges Leerzeichen enthält. Äquivalent zu [ \t\n\r\f\v] .

Ausdruck String Übereinstimmung?
\s Python RegEx 1 Übereinstimmung
PythonRegEx Keine Übereinstimmung

\S - Übereinstimmungen, bei denen eine Zeichenfolge ein Nicht-Leerzeichen enthält. Äquivalent zu [^ \t\n\r\f\v] .

Ausdruck String Übereinstimmung?
\S a b 2 Übereinstimmungen (bei a b )
    Keine Übereinstimmung

\w - Entspricht jedem alphanumerischen Zeichen (Ziffern und Buchstaben). Entspricht [a-zA-Z0-9_] . Unterstreichen Sie übrigens _ wird auch als alphanumerisches Zeichen angesehen.

Ausdruck String Übereinstimmung?
\w 12&": ;c 3 Übereinstimmungen (bei 12&": ;c )
%"> ! Keine Übereinstimmung

\W - Stimmt mit jedem nicht-alphanumerischen Zeichen überein. Entspricht [^a-zA-Z0-9_]

Ausdruck String Übereinstimmung?
\W 1a2%c 1 Übereinstimmung (bei 1a2%c )
Python Keine Übereinstimmung

\Z - Stimmt überein, wenn die angegebenen Zeichen am Ende einer Zeichenfolge stehen.

Ausdruck String Übereinstimmung?
Python\Z I like Python 1 Übereinstimmung
I like Python Programming Keine Übereinstimmung
Python is fun. Keine Übereinstimmung

Tipp: Zum Erstellen und Testen regulärer Ausdrücke können Sie RegEx-Tester-Tools wie regex101 verwenden. Dieses Tool hilft Ihnen nicht nur beim Erstellen regulärer Ausdrücke, sondern auch beim Erlernen.

Nachdem Sie nun die Grundlagen von RegEx verstanden haben, wollen wir besprechen, wie Sie RegEx in Ihrem Python-Code verwenden.


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, um mit RegEx zu arbeiten.


re.findall()

Das re.findall() -Methode gibt eine Liste von Zeichenfolgen zurück, die alle Übereinstimmungen enthält.


Beispiel 1:re.findall()


# Program to extract numbers from a string

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()

Das re.split -Methode teilt die Zeichenfolge, wo es eine Übereinstimmung gibt, und gibt eine Liste von Zeichenfolgen zurück, bei denen die Teilungen 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 den ursprünglichen String enthält.


Sie können maxsplit bestehen Argument für re.split() Methode. Dies ist die maximale Anzahl von Splits, die auftreten.


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; also alle möglichen Splits.


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 replace ersetzt werden Variable.


Beispiel 3:re.sub()


# Program to remove all 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.sub(pattern, replace, string) 
print(new_string)

# Output: abc12de23f456

Wenn das Muster nicht gefunden wird, re.sub() gibt den ursprünglichen String zurück.


Sie können count übergeben als vierter Parameter zu re.sub() Methode. Wenn es weggelassen wird, ergibt es 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()

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


Beispiel 4:re.subn()


# Program to remove all 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()

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

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

match = re.search(pattern, str)

Beispiel 5:re.search()


import re

string = "Python is fun"

# check if 'Python' is at the beginning
match = re.search('\APython', string)

if match:
  print("pattern found inside the string")
else:
  print("pattern not found")  

# Output: pattern found inside the string

Hier Übereinstimmung enthält ein Übereinstimmungsobjekt.


Objekt abgleichen

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

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


match.group()

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

Beispiel 6:Übereinstimmungsobjekt


import re

string = '39801 356, 2102 1111'

# Three digit number followed by space followed by two digit number
pattern = '(\d{3}) (\d{2})'

# match variable contains a Match object.
match = re.search(pattern, string) 

if match:
  print(match.group())
else:
  print("pattern not found")

# Output: 801 35

Hier Übereinstimmung 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 Zeichenfolge 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() und match.span()

Der start() Die Funktion gibt den Index des Anfangs der übereinstimmenden Teilzeichenfolge zurück. Ebenso end() gibt den Endindex des übereinstimmenden Teilstrings zurück.

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

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

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

match.re und match.string

Der re -Attribut eines übereinstimmenden Objekts gibt ein reguläres Ausdrucksobjekt zurück. Ebenso string Das 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 behandelt, die in re definiert sind Modul. Wenn Sie mehr erfahren möchten, besuchen Sie das Python 3 re-Modul.


Verwendung des r-Präfixes vor RegEx

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

Spiel \ wird verwendet, um verschiedene Zeichen zu maskieren, einschließlich aller Metazeichen. Allerdings mit r Präfix macht \ als normales Zeichen behandeln.


Beispiel 7:Rohstring mit r-Präfix


import re

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

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

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

Python

  1. Python-Schlüsselwörter und -Identifikatoren
  2. Python-Datentypen
  3. Python-Operatoren
  4. Python-Funktionsargumente
  5. Python-Wörterbuch
  6. Python-Iteratoren
  7. Python-Schließungen
  8. Python-Datetime
  9. Python-Zeitmodul
  10. Python-Schlaf()