Python RegEx: re.match(), re.search(), re.findall() mit Beispiel

โšก Intelligente Zusammenfassung

Python Das Tutorial zu regulรคren Ausdrรผcken behandelt re.match, re.search, re.findall und re.split anhand praktischer Beispiele. Lessons erklรคren Metazeichen, Zeichenklassen, Gruppen, Flags, Ersetzungen und gรคngige Muster fรผr die Textanalyse und -validierung.

  • ๐Ÿ”ค Modul: Importieren Sie re, um die Funktionen match, search, findall, split, sub und compile fรผr Regex-Aufgaben zu erhalten.
  • ๐Ÿ“ Metacharaktere: Muster kombinieren Punkte, Sterne, Pluszeichen, Anker und Zeichenklassen, um flexible Zeichenkettenregeln auszudrรผcken.
  • ๐ŸŽฏ รœbereinstimmung vs. Suche: Die Funktion `match` gleicht die Ankerpunkte am Anfang der Zeichenkette ab, wรคhrend `search` die gesamte Zeichenkette nach dem ersten Treffer durchsucht.
  • ๐Ÿ“‹ findall und split: findall gibt alle Nicht-รœberlappungen zurรผck.ping match; split teilt eine Zeichenkette an den Grenzen regulรคrer Ausdrรผcke auf.
  • ๐Ÿ” Ersatzteil: re.sub tauscht Treffer gegen neuen Text oder eine Callback-Funktion fรผr erweiterte Texttransformationen aus.
  • ๐Ÿค– Hilfe zu KI-Regex: KI-Assistenten generieren und erklรคren Python Regex-Muster, wodurch Zeit fรผr Ausprobieren eingespart wird.

Python RegEx-Tutorial

Was ist ein regulรคrer Ausdruck in Python?

A Regulรคrer Ausdruck (RE) In einer Programmiersprache ist dies eine spezielle Zeichenkette, die zur Beschreibung eines Suchmusters verwendet wird. Sie ist รคuรŸerst nรผtzlich fรผr beispielsweisetracInformationen aus Texten wie Code, Dateien, Protokollen, Tabellenkalkulationen oder sogar Dokumenten extrahieren.

Wรคhrend mit dem Python Regulรคrer Ausdruck: Das Erste, was man erkennen muss, ist, dass alles im Wesentlichen ein Zeichen ist und wir Muster schreiben, die einer bestimmten Zeichenfolge entsprechen, die auch als Zeichenfolge bezeichnet wird. ASCII- oder lateinische Buchstaben sind diejenigen, die Sie auf Ihrer Tastatur finden, und Unicode wird verwendet, um den fremdsprachigen Text abzugleichen. Dazu gehรถren Ziffern und Satzzeichen sowie alle Sonderzeichen wie $#@!% usw.

Zum Beispiel, a Python Ein regulรคrer Ausdruck kรถnnte ein Programm anweisen, nach einem bestimmten Text in der Zeichenfolge zu suchen und das Ergebnis dann entsprechend auszudrucken. Der Ausdruck kann Folgendes enthalten:

  • Textabgleich
  • Wiederholung
  • Verzweigung
  • Musterkomposition etc.

Regulรคrer Ausdruck oder RegEx in Python wird als RE bezeichnet (REs, Regexes oder Regex-Muster) werden importiert durch re Modul. Python unterstรผtzt regulรคre Ausdrรผcke durch Bibliotheken. RegEx in Python unterstรผtzt verschiedene Dinge wie Modifikatoren, Bezeichner und Leerzeichen.

Identifiers Modifikatoren Leerzeichen Flucht erforderlich
\d= eine beliebige Zahl (eine Ziffer) \d stellt eine Ziffer dar. Beispiel: \d{1,5} Es wird eine Ziffer zwischen 1,5 wie 424,444,545 usw. deklariert. \n = neue Zeile . + * ? [] $ ^ () {} | \
\D= alles andere als eine Zahl (eine Nicht-Ziffer) + = entspricht 1 oder mehr \s= Leerzeichen
\s = Leerzeichen
(Tab, Leerzeichen, Zeilenumbruch usw.)
? = entspricht 0 oder 1 \t =Tab
\S= alles andere als ein Leerzeichen * = 0 oder mehr \e = Flucht
\w = Buchstaben (Entspricht alphanumerischen Zeichen, einschlieรŸlich โ€ž_โ€œ) $ entspricht dem Ende einer Zeichenfolge \r = Wagenrรผcklauf
\W =alles auรŸer Buchstaben ( Entspricht einem nicht alphanumerischen Zeichen auรŸer โ€ž_โ€œ) ^ รœbereinstimmung mit dem Anfang einer Zeichenfolge \f= Formularvorschub
. = alles auรŸer Buchstaben (Punkte) | Entspricht entweder oder x/y ------
\b = jedes Zeichen auรŸer der neuen Zeile [] = Bereich oder โ€žVarianzโ€œ ------
\. {x} = diese Menge an vorhergehendem Code ------

Syntax fรผr regulรคre Ausdrรผcke (RE).

import re
  • Modul โ€žreโ€œ inklusive Python wird hauptsรคchlich fรผr die Suche und Manipulation von Zeichenfolgen verwendet
  • Wird auch hรคufig fรผr Webseiten verwendet โ€žScharfping" (extrac(groรŸe Datenmenge von Websites)

Wir beginnen das Ausdrucks-Tutorial mit dieser einfachen รœbung, indem wir die Ausdrรผcke (w+) und (^) verwenden.

Beispiel fรผr w+- und ^-Ausdruck

  • โ€ž^โ€œ: Dieser Ausdruck entspricht dem Anfang einer Zeichenfolge
  • โ€žw+โ€ž: Dieser Ausdruck entspricht dem alphanumerischen Zeichen in der Zeichenfolge

Hier sehen wir eine Python RegEx Beispiel, wie wir w+ und ^ Ausdrรผcke in unserem Code verwenden kรถnnen. Wir behandeln die Funktion re.findall() in Python, spรคter in diesem Tutorial, aber fรผr den Moment konzentrieren wir uns einfach auf den Ausdruck \w+ und \^.

Wenn wir beispielsweise fรผr unsere Zeichenfolge โ€žguru99, Bildung macht SpaรŸโ€œ den Code mit w+ und ^ ausfรผhren, erhalten wir die Ausgabe โ€žguru99โ€œ.

Beispiel fรผr w+- und ^-Ausdruck

import re
xx = "guru99,education ">is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

Denken Sie daran, wenn Sie das +-Zeichen aus dem w+ entfernen, รคndert sich die Ausgabe und es wird nur das erste Zeichen des ersten Buchstabens ausgegeben, z. B. [g]

Beispiel fรผr einen \s-Ausdruck in der re.split-Funktion

  • โ€žsโ€œ: Dieser Ausdruck wird zum Erstellen eines Leerzeichens in der Zeichenfolge verwendet

Um zu verstehen, wie dieser RegEx in Python funktioniert, beginnen wir mit einem einfachen Python RegEx-Beispiel einer Split-Funktion. Im Beispiel haben wir jedes Wort mithilfe der Funktion โ€žre.splitโ€œ aufgeteilt und gleichzeitig den Ausdruck \s verwendet, der es ermรถglicht, jedes Wort in der Zeichenfolge separat zu analysieren.

\s Ausdruck in der re.split-Funktion

Wenn Sie diesen Code ausfรผhren, erhalten Sie die Ausgabe ['we', 'are', 'splitting', 'the', 'words'].

Sehen wir uns nun an, was passiert, wenn Sie โ€ž\โ€œ aus s entfernen. In der Ausgabe gibt es kein โ€žsโ€œ-Alphabet. Dies liegt daran, dass wir โ€ž\โ€œ aus der Zeichenfolge entfernt haben und โ€žsโ€œ als regulรคres Zeichen ausgewertet wird und die Wรถrter daher รผberall dort aufgeteilt werden, wo โ€žsโ€œ in der Zeichenfolge gefunden wird.

\s Ausdruck in der re.split-Funktion

Ebenso gibt es eine Reihe anderer Python regulรคrer Ausdruck, den Sie auf verschiedene Weise verwenden kรถnnen in Python wie \d, \D, $, \., \b usw.

Hier ist der vollstรคndige Code

import re
xx = "guru99,education ">is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

Als nรคchstes werden wir die Arten von Methoden sehen, die mit regulรคren Ausdrรผcken verwendet werden in Python.

Verwendung regulรคrer Ausdrucksmethoden

Das Paket โ€žreโ€œ bietet mehrere Methoden, um Abfragen auf einer Eingabezeichenfolge durchzufรผhren. Wir werden die Methoden von re in Python:

  • re.match()
  • Forschung()
  • re.findall()

Hinweis: Basierend auf den regulรคren Ausdrรผcken, Python bietet zwei verschiedene primitive Operationen. Die Methode match sucht nur am Anfang der Zeichenfolge nach einer รœbereinstimmung, wรคhrend search an einer beliebigen Stelle in der Zeichenfolge nach einer รœbereinstimmung sucht.

re.match()

re.match() Funktion von re in Python durchsucht das regulรคre Ausdrucksmuster und gibt das erste Vorkommen zurรผck. Python Die RegEx Match-Methode sucht nur am Anfang der Zeichenfolge nach einer รœbereinstimmung. Wenn also in der ersten Zeile eine รœbereinstimmung gefunden wird, gibt sie das รœbereinstimmungsobjekt zurรผck. Wenn jedoch in einer anderen Zeile eine รœbereinstimmung gefunden wird, Python Die RegEx-Match-Funktion gibt null zurรผck.

Betrachten Sie beispielsweise den folgenden Code von Python re.match()-Funktion. Die Ausdrรผcke โ€žw+โ€œ und โ€ž\Wโ€œ werden mit den Wรถrtern รผbereinstimmen, die mit dem Buchstaben โ€žgโ€œ beginnen, und danach wird alles, was nicht mit โ€žgโ€œ beginnt, nicht erkannt. Um die รœbereinstimmung fรผr jedes Element in der Liste oder Zeichenfolge zu รผberprรผfen, fรผhren wir die For-Schleife in diesem aus. Python re.match() Beispiel.

re.match()

re.search(): Muster im Text finden

Forschung() Funktion durchsucht das regulรคre Ausdrucksmuster und gibt das erste Vorkommen zurรผck. Im Gegensatz Python re.match(), es werden alle Zeilen des Eingabestrings รผberprรผft. Python Die Funktion re.search() gibt ein รœbereinstimmungsobjekt zurรผck, wenn das Muster gefunden wird, und โ€žnullโ€œ, wenn das Muster nicht gefunden wird.

Wie verwende ich search()?

Um die Funktion search() zu verwenden, mรผssen Sie importieren Python re-Modul zuerst und fรผhren Sie dann den Code aus. Python Die Funktion re.search() รผbernimmt das zu scannende โ€žMusterโ€œ und den โ€žTextโ€œ aus unserem Hauptstring

benutze search()

Hier suchen wir zum Beispiel nach zwei Literalzeichenfolgen โ€žSoftwaretestsโ€œ โ€žguru99โ€œ in einer Textzeichenfolge โ€žSoftware Tests macht SpaรŸโ€œ. Fรผr โ€žSoftwaretestsโ€œ haben wir die รœbereinstimmung gefunden, daher gibt es die Ausgabe von Python Beispiel fรผr re.search(): โ€žEine รœbereinstimmung gefundenโ€œ. Fรผr das Wort โ€žguru99โ€œ konnten wir jedoch nichts in der Zeichenfolge finden, daher wird die Ausgabe โ€žKeine รœbereinstimmungโ€œ zurรผckgegeben.

re.findall()

finde alle() Das Modul `search()` dient der Suche nach allen Vorkommen, die einem bestimmten Muster entsprechen. Im Gegensatz dazu gibt `search()` nur das erste Vorkommen zurรผck, das dem angegebenen Muster entspricht. `findall()` durchlรคuft alle Zeilen der Datei und gibt alle nicht รผberlappenden Vorkommen zurรผck.ping รœbereinstimmungen von Mustern in einem einzigen Schritt.

So verwenden Sie re.findall() in Python?

Hier haben wir eine Liste von E-Mail-Adressen und mรถchten, dass alle E-Mail-Adressen aus der Liste abgerufen werden. Wir verwenden die Methode re.findall() in Python. Es werden alle E-Mail-Adressen aus der Liste gefunden.

 Verwenden Sie re.findall() in Python

Hier ist der vollstรคndige Code fรผr ein Beispiel von re.findall()

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python Flags

Viele Python Regex-Methoden und Regex-Funktionen nehmen ein optionales Argument namens Flags an. Diese Flags kรถnnen die Bedeutung der gegebenen Python Regex-Muster. Um diese zu verstehen, werden wir uns ein oder zwei Beispiele dieser Flags ansehen.

Verschiedene Flaggen in Python Dazu gehรถren

Syntax fรผr Regex-Flags Was macht diese Flagge?
[re.M] Berรผcksichtigen Sie Anfang/Ende jede Zeile
[re.I] Die GroรŸ-/Kleinschreibung wird ignoriert
[bez.S] Machen [ . ]
[re.U] Make { \w,\W,\b,\B} folgt den Unicode-Regeln
[re.L] Lassen Sie {\w,\W,\b,\B} dem Gebietsschema folgen
[re.X] Kommentare in Regex zulassen

Beispiel fรผr re.M- oder Multiline-Flags

Bei mehrzeiligen Mustern entspricht das Zeichen [^] dem ersten Zeichen der Zeichenfolge und dem Anfang jeder Zeile (unmittelbar nach jeder neuen Zeile). Wรคhrend der Ausdruck โ€žwโ€œ verwendet wird, um das Leerzeichen mit Zeichen zu markieren. Wenn Sie den Code ausfรผhren, gibt die erste Variable โ€žk1โ€œ nur das Zeichen โ€žgโ€œ fรผr das Wort โ€žguru99โ€œ aus, wรคhrend beim Hinzufรผgen des Flags โ€žmehrzeiligโ€œ die ersten Zeichen aller Elemente in der Zeichenfolge abgerufen werden.

Beispiel fรผr re.M- oder Multiline-Flags

Hier ist der Code

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Wir haben die Variable xx fรผr die Zeichenfolge โ€žguru99โ€ฆ. careerguru99โ€ฆ.seleniumโ€œ deklariert.
  • Fรผhren Sie den Code aus, ohne mehrzeilige Flags zu verwenden. Die Ausgabe erfolgt nur โ€žgโ€œ aus den Zeilen
  • Fรผhren Sie den Code mit dem Flag โ€žmultilineโ€œ aus. Wenn Sie โ€žk2โ€œ drucken, wird die Ausgabe als โ€žgโ€œ, โ€žcโ€œ und โ€žsโ€œ ausgegeben.
  • Den Unterschied sehen wir also nach und vor dem Hinzufรผgen mehrerer Zeilen im obigen Beispiel.

Ebenso kรถnnen Sie auch andere Python Flags wie re.U (Unicode), re.L (Gebietsschema folgen), re.X (Kommentare zulassen) usw.

Python 2 Beispiel

Die obigen Codes sind Python 3 Beispiele, Wenn Sie in laufen wollen Python 2 Bitte beachten Sie den folgenden Code.

# Example of w+ and ^ Expression
import re
xx = "guru99,education ">is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education ">is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

Testen Sie Ihre Python Wissen

1. Mit welcher Methode werden alle Vorkommen eines Musters in einer Zeichenfolge gefunden?

  • Forschung()
  • re.match()
  • re.findall()
  • erneut teilen()
re.findall() wird verwendet, um alle Vorkommen eines Musters in einer Zeichenfolge zu finden.

2. Was stellt die Zeichenklasse \d in regulรคren Ausdrรผcken dar?

  • Beliebige Ziffer (0-9)
  • Alle Zeichen, die keine Ziffern sind
  • Alle Leerzeichen
  • Jeder Buchstabe oder jede Zahl
\d steht fรผr eine beliebige Ziffer (0-9).

3. Welche Funktion wรผrden Sie verwenden, um eine Zeichenfolge basierend auf Leerzeichen aufzuteilen?

  • re.split(r'\s', Zeichenfolge)
  • re.findall(r'\w+', Zeichenfolge)
  • re.match(r'\s+', Zeichenfolge)
  • re.split(r'\w+', Zeichenfolge)
re.split(r'\s', string) teilt einen String basierend auf Leerzeichen unter Verwendung des \s-Ausdrucks.

4. Was ist der Hauptunterschied zwischen re.match() und re.search()?

  • re.match() sucht nach einem Muster am Anfang einer Zeichenfolge, wรคhrend re.search() nach einem Muster an einer beliebigen Stelle in der Zeichenfolge sucht.
  • re.match() gibt alle รœbereinstimmungen zurรผck, wรคhrend re.search() die erste รœbereinstimmung zurรผckgibt.
  • re.search() ist schneller als re.match().
  • Beide Funktionen verhalten sich gleich.
re.match() sucht nach einem Muster am Anfang einer Zeichenfolge, wรคhrend re.search() nach einem Muster an einer beliebigen Stelle in der Zeichenfolge sucht.

Hรคufig gestellte Fragen

`re.match` gibt nur dann ein Match-Objekt zurรผck, wenn das Muster am Anfang der Zeichenkette รผbereinstimmt. `re.search` durchsucht die gesamte Zeichenkette und gibt die erste รœbereinstimmung zurรผck.

Ja. KI-Tools wie ChatGPT, Copilot und Regex-spezifische Assistenten generieren Muster aus einfacher Sprache, erklรคren Erfassungen und รผbersetzen regulรคre Ausdrรผcke zwischen Sprachen, wรคhrend sie gleichzeitig auf hรคufige Fehler hinweisen.

KI-Tools heben jedes Metazeichen hervor, simulieren รœbereinstimmungen Schritt fรผr Schritt und schlagen Korrekturen vor. Sie identifizieren Probleme mit gierigen Quantifizierern, fehlende Escape-Sequenzen und empfehlen bei Bedarf Lookaheads.

Verwenden Sie `re.split(pattern, string)`. Diese Funktion gibt eine Liste der Teilstrings zwischen den Treffern zurรผck. Das Muster kann Trennzeichen gruppieren und diese in das Ergebnis aufnehmen.

Rufen Sie re.sub(pattern, replacement, string) auf. Die Ersetzung kann eine Zeichenkette mit Rรผckverweisen wie \\1 sein oder eine Funktion, die aus jedem รœbereinstimmungsobjekt berechneten Text zurรผckgibt.

Flags modifizieren das Verhalten von Mustern. re.IGNORECASE gleicht GroรŸ- und Kleinbuchstaben aus. re.MULTILINE Sorgt dafรผr, dass ^ und $ Zeilengrenzen anstatt nur Zeichenkettengrenzen erkennen.

Ja. Katastrophale Rรผckenschmerzen.tracFehlerhafte verschachtelte Quantoren kรถnnen zum Absturz des Interpreters fรผhren. Vermeiden Sie Muster wie (a+)+, bevorzugen Sie nach Mรถglichkeit atomare Gruppen und begrenzen Sie die EingabegrรถรŸe vor der Auswertung regulรคrer Ausdrรผcke.

`re.compile` gibt ein kompiliertes Musterobjekt zurรผck. Die Wiederverwendung desselben Musters fรผr viele Zeichenketten ist schneller, da die Kompilierung nur einmal ausgefรผhrt wird. AuรŸerdem wird die Verwendung von regulรคren Ausdrรผcken im Code dadurch รผbersichtlicher.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: