Heim  >  Artikel  >  Backend-Entwicklung  >  Reguläre Python-Ausdrücke

Reguläre Python-Ausdrücke

高洛峰
高洛峰Original
2016-11-23 14:07:271014Durchsuche

Ein regulärer Ausdruck ist eine spezielle Zeichenfolge, mit deren Hilfe Sie leicht überprüfen können, ob eine Zeichenfolge einem bestimmten Muster entspricht. Python hat seit Version 1.5 das re-Modul hinzugefügt, das Muster für reguläre Ausdrücke im Perl-Stil bereitstellt. Das

re-Modul erweitert die Python-Sprache um vollständige reguläre Ausdrucksfunktionen. Die

compile-Funktion generiert ein reguläres Ausdrucksobjekt basierend auf einer Musterzeichenfolge und optionalen Flag-Argumenten. Dieses Objekt verfügt über eine Reihe von Methoden zum Abgleichen und Ersetzen regulärer Ausdrücke. Das

re-Modul bietet auch mit diesen Methoden identische Funktionen, die als erstes Argument eine Musterzeichenfolge verwenden.

In diesem Kapitel werden hauptsächlich die häufig verwendeten Funktionen zur Verarbeitung regulärer Ausdrücke in Python vorgestellt.

re.match-Funktion

re.match versucht, ein Muster vom Anfang der Zeichenfolge abzugleichen.

Funktionssyntax:

re.match(pattern, string, flags=0)

Funktionsparameterbeschreibung:

Parameter

Beschreibung

Muster, das mit einem regulären Ausdruck übereinstimmt

string Die zu vergleichende Zeichenfolge.

Flags Flags werden verwendet, um die Vergleichsmethode regulärer Ausdrücke zu steuern, z. B. ob Groß-/Kleinschreibung beachtet wird, mehrzeiliger Vergleich usw.

Die re.match-Methode gibt ein passendes Objekt zurück, wenn die Übereinstimmung erfolgreich ist, andernfalls gibt sie None zurück.

Wir können die passende Objektfunktion „group(num)“ oder „groups()“ verwenden, um den passenden Ausdruck zu erhalten.

Matching-Objekt-Methode

Beschreibung

group(num=0) Die Zeichenfolge des gesamten übereinstimmenden Ausdrucks, Gruppe ( ) kann mehrere Gruppennummern gleichzeitig eingeben. In diesem Fall wird ein Tupel zurückgegeben, das die Werte enthält, die diesen Gruppen entsprechen.

groups() Gibt ein Tupel zurück, das alle Gruppenzeichenfolgen von 1 bis zur enthaltenen Gruppennummer enthält.

Instanz:

#!/usr/bin/python

import re

line = "Katzen sind schlauer als Hunde"

matchObj = re.match( r'(.*) are (.*?) .*', line, re .M|re.I)

if matchObj:

print "matchObj.group() : ", matchObj.group()

print "matchObj.group(1) : ", matchObj.group(1)

print "matchObj.group(2) : ", matchObj.group(2)

else:

print „No match!!“

Das Ausführungsergebnis des obigen Beispiels ist wie folgt:

matchObj.group() : Katzen sind schlauer als Hunde

matchObj.group(1) : Katzen

matchObj.group(2) : schlauer

re.search-Methode

re.match versucht, ein Muster vom Anfang der Zeichenfolge abzugleichen.

Funktionssyntax:

re.search(pattern, string, flags=0)

Funktionsparameterbeschreibung:

Parameter

Beschreibung

Muster, das mit einem regulären Ausdruck übereinstimmt

string Die zu vergleichende Zeichenfolge.

Flags Flags werden verwendet, um die Vergleichsmethode regulärer Ausdrücke zu steuern, z. B. ob Groß-/Kleinschreibung beachtet wird, mehrzeiliger Vergleich usw.

Wenn die Übereinstimmung erfolgreich ist, gibt die re.search-Methode ein passendes Objekt zurück, andernfalls gibt sie None zurück.

Wir können die passende Objektfunktion „group(num)“ oder „groups()“ verwenden, um den passenden Ausdruck zu erhalten.

Übereinstimmende Objektmethode

Beschreibung

group(num=0) Passt die Zeichenfolge des gesamten Ausdrucks an, Gruppe ( ) kann mehrere Gruppennummern gleichzeitig eingeben. In diesem Fall wird ein Tupel zurückgegeben, das die Werte enthält, die diesen Gruppen entsprechen.

groups() Gibt ein Tupel zurück, das alle Gruppenzeichenfolgen von 1 bis zur in enthaltenen Gruppennummer enthält.

Instanz:

#!/usr/bin/python

import re

line = "Katzen sind schlauer als Hunde";

matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:

print "matchObj.group() : ", matchObj.group()

print "matchObj.group(1) : ", matchObj.group(1)

print "matchObj.group(2) : ", matchObj.group(2)

else:

print „No match!!“

Die Ergebnisse der obigen Beispielausführung lauten wie folgt:

matchObj.group() : Katzen sind schlauer als Hunde

matchObj.group(1) : Katzen

matchObj.group(2) : schlauer

Der Unterschied zwischen re.match und re.search

re.match stimmt nur mit dem Anfang der Zeichenfolge überein, schlägt der Abgleich fehl und die Funktion gibt None zurück, während re.search die gesamte Zeichenfolge abgleicht, bis eine Übereinstimmung gefunden wird.

Instanz:

#!/usr/bin/python

import re

line = "Katzen sind schlauer als Hunde";

matchObj = re.match( r'dogs', line, re.M|re.I)

if matchObj:

print "match --> matchObj.group() : ", matchObj.group()

else:

print "No match !!"

matchObj = re.search( r'dogs', line, re.M|re.I)

if matchObj:

print "search --> matchObj.group() : ", matchObj.group()

else:

print "No match!!"

Die obigen Beispiel-Laufergebnisse lauten wie folgt:

Keine Übereinstimmung!!

Suche -- > matchObj .group() : dogs

Abrufen und ersetzen

Pythons re-Modul bietet re.sub zum Ersetzen von Übereinstimmungen in Zeichenfolgenelementen.

Syntax:

re.sub(pattern, repl, string, max=0)

Die zurückgegebene Zeichenfolge wird durch die am weitesten links stehende, sich nicht wiederholende Übereinstimmung von RE in der Zeichenfolge ersetzt. Wird das Muster nicht gefunden, wird das Zeichen unverändert zurückgegeben.

Der optionale Parameter count ist die maximale Anzahl von Ersetzungen nach dem Mustervergleich; count muss eine nicht negative ganze Zahl sein. Der Standardwert ist 0, der alle Übereinstimmungen ersetzt.

Instanz:

#!/usr/bin/python

import re

phone = "2004-959-559 # Dies ist Telefonnummer"

# Kommentare im Python-Stil löschen

num = re.sub(r' #.*$', "", phone)

print "Phone Num : ", num

# Alles außer Ziffern entfernen

num = re.sub(r'D', "", phone)

print "Phone Num : ", num

Das obige Beispiel wird ausgeführt. Die Ergebnisse sind wie folgt:

Telefonnummer: 2004-959-559

Telefonnummer: 2004959559

Modifikatoren für reguläre Ausdrücke – optionale Flags

Reguläre Ausdrücke können eine Reihe optionaler Flag-Modifikatoren enthalten, um die übereinstimmenden Muster zu steuern. Der Modifikator wird als optionales Flag angegeben. Mehrere Flags können durch bitweises ODER(|) angegeben werden. Beispielsweise ist re.I |. re.M auf die Flags I und M gesetzt:

Modifikator

Beschreibung

Re . Entspricht allen Zeichen, einschließlich Zeilenumbrüchen.

re.U analysiert Zeichen gemäß dem Unicode-Zeichensatz. Dieses Flag betrifft w, W, b, B.

re.X Dieses Flag macht das Schreiben regulärer Ausdrücke verständlicher, indem es Ihnen ein flexibleres Format bietet.

Muster für reguläre Ausdrücke

Die Musterzeichenfolge verwendet eine spezielle Syntax, um einen regulären Ausdruck darzustellen:

Buchstaben und Zahlen stellen sich selbst dar. Buchstaben und Zahlen in einem regulären Ausdrucksmuster stimmen mit derselben Zeichenfolge überein.

Die meisten Buchstaben und Zahlen haben unterschiedliche Bedeutungen, wenn ihnen ein Backslash vorangestellt ist.

Satzzeichen stimmen nur dann mit sich selbst überein, wenn sie maskiert sind, andernfalls stellen sie eine besondere Bedeutung dar.

Der Backslash selbst muss mit einem Backslash maskiert werden.

Da reguläre Ausdrücke normalerweise Backslashes enthalten, ist es besser, für deren Darstellung rohe Zeichenfolgen zu verwenden. Musterelemente (z. B. r'/t', äquivalent zu '//t') stimmen mit den entsprechenden Sonderzeichen überein.

In der folgenden Tabelle sind die speziellen Elemente in der Mustersyntax für reguläre Ausdrücke aufgeführt. Wenn Sie ein Muster verwenden und optionale Flag-Argumente bereitstellen, ändert sich die Bedeutung einiger Musterelemente.

Muster

Beschreibung

^ Entspricht dem Anfang der Zeichenfolge.

$ Entspricht dem Ende von die Zeichenfolge.

. Entspricht jedem Zeichen, außer Zeilenumbrüchen. Wenn das Flag re.DOTALL angegeben ist, kann es mit jedem Zeichen, einschließlich Zeilenumbrüchen, übereinstimmen.

[...] Wird zur Darstellung einer Gruppe von Zeichen verwendet, die separat aufgeführt werden: [amk] stimmt mit „a“, „m“ oder „k“ überein.

[^...] Nicht Verfügbare Zeichen in []: [^abc] entspricht den Zeichen außer a, b, c.

re* Entspricht 0 oder mehr Ausdrücken.

re Entspricht einem oder mehreren Ausdrücken.

re? Entspricht 0 oder 1 Fragmenten, die durch den vorherigen regulären Ausdruck definiert sind, Greedy-Modus

re{ n}

re{ n,} Entspricht genau n vorherigen Ausdrücken.

re{ n, m} Passt n bis m-fache Fragmente an, die durch den vorherigen regulären Ausdruck definiert sind, auf gierige Weise

a| b Passt zu a oder b

(re ) G Entspricht dem Ausdruck in Klammern und stellt auch eine Gruppe dar

(?imx) Der reguläre Ausdruck enthält drei optionale Flags: i, m oder x. Betrifft nur den Bereich in Klammern.

(?-imx) Regulärer Ausdruck zum Deaktivieren der optionalen Flags i, m oder x. Betrifft nur den Bereich in Klammern.

(?: re) Ähnlich wie (...), stellt aber keine Gruppe dar

(?imx: re) Verwenden Sie optionale Flags i, m oder x in Klammern

(?-imx: re) Verwenden Sie keine optionalen Flags i, m oder x in Klammern

(?#...) Kommentar. positives Vorwärtstrennzeichen. Erfolgreich, wenn der enthaltene reguläre Ausdruck, gekennzeichnet durch ..., erfolgreich mit der aktuellen Position übereinstimmt, andernfalls schlägt er fehl. Aber sobald der enthaltene Ausdruck ausprobiert wurde, verbessert sich die Matching-Engine überhaupt nicht; der Rest des Musters muss immer noch die rechte Seite des Trennzeichens ausprobieren.

(?! re) Negatives Trennzeichen weiterleiten. Im Gegensatz zum positiven Trennzeichen ist dies erfolgreich, wenn der enthaltene Ausdruck an der aktuellen Position der Zeichenfolge nicht gefunden werden kann.

(?> re) Entspricht einem unabhängigen Muster und verhindert so ein Zurückverfolgen.

w entspricht alphanumerischen Zeichen.

W entspricht nicht alphanumerischen Zeichen.

s entspricht jedem Leerzeichen, äquivalent zu [tnrf]. -alphanumerisches Zeichen Das Leerzeichen

d entspricht einer beliebigen Zahl, äquivalent zu [0-9].

D entspricht einer beliebigen Zahl, die keine Zahl ist.

A entspricht dem Anfang der Zeichenfolge

Z stimmt mit dem Ende der Zeichenfolge überein. Wenn es eine neue Zeile gibt, wird nur das Ende der Zeichenfolge vor der neuen Zeile abgeglichen. c

z Passt das Ende der Zeichenfolge an

G Passt die Position an, an der die letzte Übereinstimmung abgeschlossen ist.

b Entspricht einer Wortgrenze, die sich auf die Position zwischen einem Wort und einem Leerzeichen bezieht. Beispielsweise entspricht „erb“ dem „er“ in „never“, aber nicht dem „er“ in „verb“.

B Entspricht Nicht-Wortgrenzen. „erB“ entspricht „er“ in „verb“, aber nicht in „never“.

n, t usw. Entspricht einem Zeilenumbruchzeichen. Entspricht einem Tabulatorzeichen. usw.

1...9 entspricht dem Unterausdruck der n-ten Gruppe.

10 Entspricht dem Unterausdruck der n-ten Gruppe, wenn er übereinstimmt. Ansonsten bezieht es sich auf den Ausdruck des oktalen Zeichencodes.

Beispiel für einen regulären Ausdruck

Zeichenübereinstimmung

Beispiel

Beschreibung

Python entspricht „Python“.

Zeichenklasse

Instanz

Beschreibung

[Pp]ython Übereinstimmungen „Python“ oder „python“

rub[ye] Entspricht „ruby“ oder „rube“

[aeiou] Entspricht jedem Buchstaben innerhalb der eckigen Klammern

[ 0- 9] entspricht einer beliebigen Zahl. Ähnlich wie [0123456789]

[a-z] Entspricht jedem Kleinbuchstaben

[A-Z] Entspricht jedem Großbuchstaben

[a-zA-Z0-9] Entspricht jedem Buchstaben und Zahlen

[^aeiou] Alle Zeichen außer Aeiou-Buchstaben

[^0-9] Entspricht Zeichen außer Zahlen

Sonderzeichenklasse

Instanz

Beschreibung

Entspricht jedem einzelnen Zeichen außer „n“. Um ein beliebiges Zeichen einschließlich „n“ zu finden, verwenden Sie ein Muster wie „[.n]“.

d entspricht einem numerischen Zeichen. Entspricht [0-9].

D entspricht einem nicht numerischen Zeichen. Entspricht [^0-9].

s entspricht jedem Leerzeichen, einschließlich Leerzeichen, Tabulatoren, Formularfeeds usw. Entspricht [fnrtv].

S entspricht jedem Zeichen, das kein Leerzeichen ist. Entspricht [^ fnrtv].

w Entspricht jedem Wortzeichen, einschließlich eines Unterstrichs. Entspricht „[A-Za-z0-9_]“.

W entspricht jedem Nicht-Wort-Zeichen. Entspricht '[^A-Za-z0-9_]'.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Python-CGI-ProgrammierungNächster Artikel:Python-CGI-Programmierung