Regex-Platzhalter mit dem Re-Modul in Python

Jay Shaw 10 Oktober 2023
  1. Verwenden Sie die Funktion re.sub() für Regex-Operationen mit Wildcards in Python
  2. Ersetzen Sie Übereinstimmungen in regulären Ausdrücken mit dem Modul re.sub() in Python
  3. Verstehe, wie man Wildcards mit dem Untermodul re.sub() verwendet
  4. Verwenden Sie zwei oder mehr Regex-Platzhalter zusammen in Python
  5. Führen Sie Operationen an Zeichenfolgen mit dem Regex-Muster und der Funktion re.sub() durch, indem Sie in Python einen Platzhalter hinzufügen
  6. Abschluss
Regex-Platzhalter mit dem Re-Modul in Python

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:

  1. Die erste Codezeile importiert das re-Modul.
  2. 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.
  3. Der String, auf dem die Unteroperation implementiert wird, wird in der Variablen string_reg gespeichert.
  4. Der String zum Ersetzen des Musters wird in der Variablen repl gespeichert.
  5. Die Operation re.sub() sucht das Muster rex in der String-Variablen string_reg und ersetzt es durch repl. Der zurückgegebene String wird in der Variablen result 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.

  1. . (Der Punkt) - Verwenden Sie re.sub mit dem . Wildcard in Python, um mit jedem Zeichen außer einer neuen Zeile übereinzustimmen. Das re-Modul wird in das Programm unten importiert, und drei String-Instanzen werden in einer String-Variablen string_reg gespeichert.

    Verwendung von re.sub() mit dem . Wildcard in Python wird die Variable string_reg mit dem Ergebnis überschrieben, das von der Funktion re.sub() zurückgegeben wird. Da der Punkt auf ein neues Zeichen passt, sucht das Programm nach dem Muster ad und beliebig vielen d, die sich nach ad wiederholen.

    In der Ausgabe ist zu sehen, dass das Programm jedes Mal, wenn es ein Muster ad. findet, es durch REMOVED 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
    
  2. Das Sternchen (*) - Verwenden Sie re.sub() mit diesem Platzhalter in Python, um dem vorangehenden RE so viele Wiederholungen wie möglich zu geben, wobei 0 oder mehr dieser Wiederholungen im resultierenden RE übereinstimmen.

    Beispielsweise entspricht ad* den Buchstaben 'a', 'ad' oder 'a', gefolgt von einer beliebigen Anzahl von d.

    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
    
  3. Das + - Verwenden Sie re.sub() mit diesem Platzhalter in Python, um eine oder mehrere Wiederholungen des vorherigen RE im neuen RE abzugleichen. Ad+ passt nicht zu 'a'; stattdessen stimmt es mit 'a' überein, gefolgt von einer beliebigen Zahl von d ungleich Null.

    Die Funktion sucht nach dem Muster 'ad....', wobei das '...' die sich wiederholende Nummer des nachfolgenden RE '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
    
  4. Das ? - lässt das nächste RE mit den 0 oder 1 Wiederholungen des vorherigen RE übereinstimmen. Das Muster Werbung? 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.

  1. 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 Muster RE<.*?> 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
    
  2. 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 das a* mit allen vier a übereinstimmt, aber wenn das letzte a* angetroffen wird, geht der Ausdruck zurück und das a* stimmt nur überein insgesamt drei as, wobei das letzte a* zum vierten a* passt.

    Aber wenn der Ausdruck a*+a verwendet wird, um "aaaa" abzugleichen, stimmt das a*+ mit allen vier a*+ ü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++ und x?+ 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 Modul regex().

    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 wie ad++.

    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

  1. Importieren Sie das re-Modul.

  2. Erstellen Sie eine Variable string_reg und speichern Sie einen beliebigen String-Wert. Hier wird ein zusammengesetzter String gespeichert, was bedeutet, dass die Funktion re.sub() ihre Wirkung auf alle vier Gruppen innerhalb des Strings ausübt.

    string_reg = """\
        23khadddddh234 > REMOVED23khh234
        add2asdf675 > REMOVED2asdf675"""
    
  3. 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 weder add23khh234 noch add2asdf675 ü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.

Verwandter Artikel - Python Regex