Regex-Platzhalter mit dem Re-Modul in Python
-
Verwenden Sie die Funktion
re.sub()
für Regex-Operationen mit Wildcards in Python -
Ersetzen Sie Übereinstimmungen in regulären Ausdrücken mit dem Modul
re.sub()
in Python -
Verstehe, wie man Wildcards mit dem Untermodul
re.sub()
verwendet - Verwenden Sie zwei oder mehr Regex-Platzhalter zusammen in Python
-
Führen Sie Operationen an Zeichenfolgen mit dem Regex-Muster und der Funktion
re.sub()
durch, indem Sie in Python einen Platzhalter hinzufügen - Abschluss
Wildcards werden in regulären Ausdrücken als Symbol verwendet, um ein oder mehrere Zeichen darzustellen oder auszutauschen. Diese werden meist verwendet, um Suchkriterien zu vereinfachen.
Dieser Artikel erklärt ausführlich, wie man re.sub()
mit einem Platzhalter in Python verwendet, um Zeichenketten mit Regex abzugleichen.
Verwenden Sie die Funktion re.sub()
für Regex-Operationen mit Wildcards in Python
Das Modul re
in Python wird für Operationen mit regulären Ausdrücken (RegEx) verwendet. Dies sind eindeutige Zeichenfolgen, die verwendet werden, um eine Zeichenfolge oder eine Gruppe von Zeichenfolgen zu finden.
Der Vergleich eines Textes mit einem bestimmten Muster kann bestimmen, ob es vorhanden oder nicht vorhanden ist.
Es kann auch ein Muster in ein oder mehrere Untermuster unterteilen. Regex-Unterstützung ist in Python über das re
-Modul verfügbar.
Sein Hauptzweck besteht darin, innerhalb eines regulären Ausdrucks nach einer Zeichenfolge zu suchen.
Bevor wir verstehen, wie man re.sub()
mit einem Platzhalter in Python verwendet, lernen wir die Implementierung der Funktion re.sub()
in normalen String-Anweisungen kennen.
Ersetzen Sie Übereinstimmungen in regulären Ausdrücken mit dem Modul re.sub()
in Python
Die Funktion re.sub()
ersetzt einen oder mehrere Treffer im gegebenen Text durch einen String.
re.sub(pattern, repl, string, count=0, flags=0)
Es gibt die Zeichenfolge zurück, die durch Ersetzen des Ersatzes repl
für die am weitesten links liegenden nicht überlappenden Vorkommen des Musters in der Zeichenfolge erstellt wurde.
In Ermangelung einer Übereinstimmung wird die Zeichenfolge in ihrer ursprünglichen Form zurückgegeben. Wenn repl
ein String ist, werden alle Backslash-Escapes verarbeitet. Das repl
kann auch eine Funktion sein.
Lassen Sie uns das folgende Codebeispiel verstehen.
import re
rex = "[0-9]+"
string_reg = "ID - 54321, Pay - 586.32"
repl = "NN"
print("Original string")
print(string_reg)
result = re.sub(rex, repl, string_reg)
print("After replacement")
print(result)
Was der Code macht:
- Die erste Codezeile importiert das
re
-Modul. - Das zu suchende Muster wird in der Variablen
rex
gespeichert. Der Quantor -[0-9]+
impliziert eine Gruppe von Ziffern von 0-9, deren Dezimalstellen beliebig viele Ziffern umfassen können. - Der String, auf dem die Unteroperation implementiert wird, wird in der Variablen
string_reg
gespeichert. - Der String zum Ersetzen des Musters wird in der Variablen
repl
gespeichert. - Die Operation
re.sub()
sucht das Musterrex
in der String-Variablenstring_reg
und ersetzt es durchrepl
. Der zurückgegebene String wird in der Variablenresult
gespeichert.
result = re.sub(rex, repl, string_reg)
Ausgabe: Alle numerischen Stellen werden durch 'NN'
ersetzt, während alle alphabetischen unverändert bleiben.
Original string
ID - 54321, Pay - 586.32
After replacement
ID - NN, Pay - NN.NN
Verstehe, wie man Wildcards mit dem Untermodul re.sub()
verwendet
Dieser Artikel konzentriert sich hauptsächlich auf vier Arten von Platzhaltern - .
(Punkt), *
, ?
und +
. Zu lernen, was jeder von ihnen tut, ist wichtig, um zu lernen, wie man re.sub()
mit einem Platzhalter in Python verwendet.
-
.
(Der Punkt) - Verwenden Siere.sub
mit dem.
Wildcard in Python, um mit jedem Zeichen außer einer neuen Zeile übereinzustimmen. Dasre
-Modul wird in das Programm unten importiert, und drei String-Instanzen werden in einer String-Variablenstring_reg
gespeichert.Verwendung von
re.sub()
mit dem.
Wildcard in Python wird die Variablestring_reg
mit dem Ergebnis überschrieben, das von der Funktionre.sub()
zurückgegeben wird. Da der Punkt auf ein neues Zeichen passt, sucht das Programm nach dem Musterad
und beliebig vielend
, die sich nachad
wiederholen.In der Ausgabe ist zu sehen, dass das Programm jedes Mal, wenn es ein Muster
ad.
findet, es durchREMOVED
ersetzt.import re string_reg = "a23kaddhh234 ... add2asdf675 ... xxxadd2axxx" string_reg = re.sub(r"ad.", "REMOVED ", string_reg) print(string_reg)
Ausgang:
a23kREMOVED hh234 ... REMOVED 2asdf675 ... xxxREMOVED 2axxx
-
Das Sternchen (
*
) - Verwenden Siere.sub()
mit diesem Platzhalter in Python, um dem vorangehendenRE
so viele Wiederholungen wie möglich zu geben, wobei 0 oder mehr dieser Wiederholungen im resultierendenRE
übereinstimmen.Beispielsweise entspricht
ad*
den Buchstaben'a'
,'ad'
oder'a'
, gefolgt von einer beliebigen Anzahl vond
.In der Ausgabe hier ist zu sehen, dass jede Instanz von
'a'
und'ad'
durch das Schlüsselwort'PATCH'
ersetzt wird.import re string_reg = "a23kaddhh234 ... add2asdf675 ... xxxadd2axxx" string_reg = re.sub(r"ad*", "PATCH", string_reg) print(string_reg)
Ausgang:
PATCH23kPATCHhh234 ... PATCH2PATCHsdf675 ... xxxPATCH2PATCHxxx
-
Das
+
- Verwenden Siere.sub()
mit diesem Platzhalter in Python, um eine oder mehrere Wiederholungen des vorherigenRE
im neuenRE
abzugleichen.Ad+
passt nicht zu'a'
; stattdessen stimmt es mit'a'
überein, gefolgt von einer beliebigen Zahl vond
ungleich Null.Die Funktion sucht nach dem Muster
'ad....'
, wobei das'...'
die sich wiederholende Nummer des nachfolgendenRE
'd'
darstellt und ersetzt es durch'POP'
.import re string_reg = "a23kaddhh234 ... add2asdf675 ... xxxadd2axxx" string_reg = re.sub(r"ad+", "POP", string_reg) print(string_reg)
Ausgang:
a23kPOPhh234 ... POP2asdf675 ... xxxPOP2axxx
-
Das
?
- lässt das nächsteRE
mit den 0 oder 1 Wiederholungen des vorherigenRE
übereinstimmen. Das MusterWerbung?
entspricht entweder'a'
oder'ad'
.Das Programm findet die Instanzen von
'a'
oder'ad'
und ersetzt sie durch den regulären Ausdruck (REGEX)'POP'
.import re string_reg = "a23kaddhh234 ... add2asdf675 ... xxxadd2axxx" string_reg = re.sub(r"ad?", "POP", string_reg) print(string_reg)
Ausgang:
POP23kPOPdhh234 ... POPd2POPsdf675 ... xxxPOPd2POPxxx
Verwenden Sie zwei oder mehr Regex-Platzhalter zusammen in Python
Manchmal reicht die Verwendung von re.sub()
mit einem Platzhalter in Python mit nur einem einzigen Quantifizierer nicht aus, um das gewünschte Ergebnis zu erhalten. Das Kombinieren von Quantoren ermöglicht die Weitergabe komplexerer Muster an das System.
Lassen Sie uns einige von ihnen verstehen.
-
Das
*?
,+?
,??
- In den vorherigen Beispielen haben wir die Quantifizierer ‘.
’, ‘+
’, ‘*
’ kennengelernt. Alle von ihnen sind gierig, was bedeutet, dass sie mit so viel Text wie möglich übereinstimmen.Wenn zum Beispiel
RE<.*>
mit<a> b <c>
abgeglichen wird, stimmt es mit der vollständigen Zeichenfolge und nicht nur mit<a>
überein, was oft nicht das gewünschte Verhalten ist.Der
?
Quantifizierer wird am Ende hinzugefügt, um das Problem zu lösen. Der Quantifizierer weist ihn an, den Abgleich auf minimale oder nicht gierige Weise durchzuführen, was impliziert, dass die wenigsten Zeichen abgeglichen werden.Nur
<a>
passt, wenn das MusterRE<.*?>
verwendet wird.import re string_reg = "as56ad5 ... dhgasd55df ... xxxadd2axxx" string_reg = re.sub(r"ad*?", "SUGAR", string_reg) print(string_reg)
Ausgabe: Die
Anzeige*?
Quantifier sucht nach Instanzen von nur'a'
.SUGARs56SUGARd5 ... dhgSUGARsd55df ... xxxSUGARdd2SUGARxxx
Für
ad+?
: Es wird nur nach der Instanz'ad'
gesucht.as56SUGAR5 ... dhgasd55df ... xxxSUGARd2axxx
Für
ad??
: Es wird auch nur nach'a'
gesucht.SUGARs56SUGARd5 ... dhgSUGARsd55df ... xxxSUGARdd2SUGARxxx
-
Die
*+
,++
,?+
(auch als Possessiv-Quantifizierer bekannt) - Ähnlich wie die Quantifizierer'*'
,'+'
und'?'
, die mit die Übereinstimmung'+'
so oft wie möglich.Wenn der Ausdruck danach nicht übereinstimmt, ermöglichen diese keine Rückverfolgung, wie dies bei den gierigen Quantifizierern der Fall ist. Diese Art von Quantor wird als Possessivquantor bezeichnet.
Zum Beispiel stimmt
a*a
mit"aaaa"
überein, da dasa*
mit allen vier a übereinstimmt, aber wenn das letztea*
angetroffen wird, geht der Ausdruck zurück und dasa*
stimmt nur überein insgesamt drei as, wobei das letztea*
zum viertena*
passt.Aber wenn der Ausdruck
a*+a
verwendet wird, um"aaaa"
abzugleichen, stimmt dasa*+
mit allen viera*+
überein, aber es kann nicht zurückverfolgt werden und wird nicht mit dem abschließendenübereinstimmen. "a"
, da es keine weiteren übereinstimmenden Zeichen finden kann.Die Äquivalente von
x*+
,x++
undx?+
sind jeweils(?>x*)
,(?>x+)
und(?>x?)
. Schauen wir uns das Programm an, um das Konzept besser zu verstehen.import regex string_reg = "as56ad5 ... dhgasd55df ... xxxadd2axxx" string_reg = regex.sub(r"ad*+", "SUGAR", string_reg) print(string_reg)
Hinweis: Das Modul
re
unterstützt keine Possessivquantoren. Verwenden Sie stattdessen das Modulregex()
.Ausgabe: Findet eine Instanz von entweder
a
oder'adddd....'
.SUGARs56SUGAR5 ... dhgSUGARsd55df ... xxxSUGAR2SUGARxxx
Für
ad++
: Findet Instanzen von'ad'
oder'adddd....'
.as56SUGAR5 ... dhgasd55df ... xxxSUGAR2axxx
Für
ad+?
: Verhält sich wiead++
.as56SUGAR5 ... dhgasd55df ... xxxSUGARd2axxx
Führen Sie Operationen an Zeichenfolgen mit dem Regex-Muster und der Funktion re.sub()
durch, indem Sie in Python einen Platzhalter hinzufügen
Wir haben gelernt, wie man das re.sub()
mit einem Platzhalter in Python verwendet. Jetzt werden wir die Konzepte zusammen verwenden, um nach einem Zeichenfolgenmuster in einer Regex zu suchen und das ganze Wort statt nur das Zeichenfolgenmuster zu ersetzen.
Die Problemstellung präsentiert uns eine Zeichenkette und ein Muster. Das Muster muss innerhalb der angegebenen Zeichenfolge gesucht werden.
Einmal gefunden, ersetzt die Funktion re.sub()
das ganze Wort.
Beispiel: Ersetzen Sie das ganze Wort, wenn das Muster am Anfang gefunden wird
-
Importieren Sie das
re
-Modul. -
Erstellen Sie eine Variable
string_reg
und speichern Sie einen beliebigen String-Wert. Hier wird ein zusammengesetzter String gespeichert, was bedeutet, dass die Funktionre.sub()
ihre Wirkung auf alle vier Gruppen innerhalb des Strings ausübt.string_reg = """\ 23khadddddh234 > REMOVED23khh234 add2asdf675 > REMOVED2asdf675"""
-
Die Funktion muss ein Muster innerhalb der Zeichenfolge finden, das die gesamte Zeichenfolge ersetzt, wenn sie gefunden wird. Das zu findende Muster ist
addieren
, also wird eine Kombination von Quantoren verwendet, um das gewünschte Ergebnis zu erzielen.Die Kombination sollte so sein, dass sie zu
'ad'
,'add'
oder'addddd'
passt. Allerdings sollten wederadd23khh234
nochadd2asdf675
übereinstimmen.Verwenden Sie dazu am besten
add.+?
.string_reg = re.sub(r"add.+? ", "REMOVED ", string_reg)
Code:
import re
string_reg = """\
... 23khadddddh234 > REMOVED23khh234
... add2asdf675 > REMOVED2asdf675"""
string_reg = re.sub(r"add.+? ", "REMOVED ", string_reg)
print(string_reg)
Ausgabe: Das Programm sucht nach 'ad...'
und ersetzt es, wenn es gefunden wird, durch repl
'REMOVED'
. Steht das 'ad...'
am Anfang, ersetzt es das ganze Wort.
... 23khREMOVED > REMOVED23khh234
... REMOVED > REMOVED2asdf675
Abschluss
Eine anschauliche Beschreibung, wie man re.sub()
mit einem Platzhalter in Python verwendet, wird präsentiert. Der erste Abschnitt des Artikels konzentriert sich auf die Verwendung der Python-Funktion re.sub
mit einfachem REGEX.
Dann wird das Konzept der Verwendung von Wildcards mit re.sub()
im Detail erklärt.
Nach dem Durcharbeiten des Artikels kann der Leser ganz einfach re.sub()
mit einem Platzhalter in Python verwenden und Programme erstellen, die String-Muster in REGEX suchen.