Heim > Backend-Entwicklung > Python-Tutorial > Reguläre Ausdrucksoperationen des Re-Moduls von Python

Reguläre Ausdrucksoperationen des Re-Moduls von Python

高洛峰
Freigeben: 2017-03-02 16:08:14
Original
1247 Leute haben es durchsucht

Dieses Modul bietet Vergleichsoperationen für reguläre Ausdrücke ähnlich wie Perl. Dasselbe gilt auch für Unicode-Strings.

Reguläre Ausdrücke verwenden einen Backslash „ “ zur Darstellung spezieller Formen oder als Escape-Zeichen, was im Widerspruch zur Python-Syntax steht. Daher verwendet Python „ \\ “ zur Darstellung regulärer Ausdrücke „ “, denn wenn Sie möchten Wenn Sie im regulären Ausdruck mit „ „ übereinstimmen, müssen Sie es maskieren und in „ \ „ ändern. In der Python-Syntax müssen Sie jedes Element in der Zeichenfolge maskieren, damit es zu „ \\ “ wird.

Finden Sie die obige Schreibmethode problematisch? Um reguläre Ausdrücke besser lesbar zu machen, muss ich Sie daran erinnern, dass beim Schreiben von Dateipfaden keine Rohzeichenfolgen verwendet werden , hier gibt es Fallstricke. Die Rohzeichenfolge verwendet „r“ als Präfix der Zeichenfolge, z. B. „r“n“: Sie stellt zwei Zeichen „“ und „n“ anstelle eines Zeilenumbruchzeichens dar. Diese Form wird beim Schreiben regulärer Ausdrücke in Python empfohlen.

Die meisten regulären Ausdrucksoperationen können denselben Zweck erfüllen wie Funktionen auf Modulebene oder RegexObject-Methoden. Sie müssen das reguläre Ausdrucksobjekt nicht von Anfang an kompilieren, können jedoch einige praktische Feinabstimmungsparameter nicht verwenden.

1. Syntax für reguläre Ausdrücke

Aus Platzgründen wird sie hier nicht beschrieben.

2. Der Unterschied zwischen Marsch und Suche

Python bietet zwei verschiedene primitive Operationen: Übereinstimmung und Suche. Die Übereinstimmung beginnt am Anfangspunkt der Zeichenfolge, während die Suche (Perl-Standard) jede Übereinstimmung mit der Zeichenfolge beginnt.

Hinweis: Wenn der reguläre Ausdruck mit „^“ beginnt, sind Übereinstimmung und Suche identisch. Die Übereinstimmung ist nur dann erfolgreich, wenn die übereinstimmende Zeichenfolge von Anfang an abgeglichen werden kann oder ab der Position des pos-Parameters abgeglichen werden kann. Wie folgt:

>>> import re
>>> re.match("c", "abcdef")
>>> re .search("c", "abcdef")
<_sre.SRE_Match Objekt bei 0x00A9A988>
>>> re.match("c", "cabcdef")
< _sre .SRE_Match-Objekt bei 0x00A9AB80>
>>> re.search("c","cabcdef")
<_sre.SRE_Match-Objekt bei 0x00AF1720>
>>> = re.compile("c")
>>> patterm.match("abcdef")
>>> > ;> patterm.match("abcdef",2)
<_sre.SRE_Match Objekt bei 0x00A9AB80>

3. Modulinhalt

re.compile(pattern, flags=0)


Kompilieren Sie den regulären Ausdruck und geben Sie das RegexObject-Objekt zurück. Anschließend können Sie match() und search( aufrufen. ) über die RegexObject-Objektmethode.


prog = re.compile(pattern)

result = prog.match(string)

und


result = re .match(pattern, string)


ist äquivalent.


Die erste Methode kann die Wiederverwendung regulärer Ausdrücke realisieren.


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

Suchen Sie in der Zeichenfolge, um zu sehen, ob sie mit dem regulären Ausdruck übereinstimmen kann. Gibt ein _sre.SRE_Match-Objekt oder None zurück, wenn keine Übereinstimmung gefunden wird.


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

Ob der Anfang der Zeichenfolge mit dem regulären Ausdruck übereinstimmen kann. Gibt ein _sre.SRE_Match-Objekt oder None zurück, wenn keine Übereinstimmung gefunden wird.


re.split(pattern, string, maxsplit=0)

Teilen Sie die Zeichenfolge durch einen regulären Ausdruck. Wenn Sie den regulären Ausdruck in Klammern einschließen, wird die passende Zeichenfolge ebenfalls in die Liste aufgenommen und zurückgegeben. maxsplit ist die Anzahl der Trennungen, maxsplit=1 trennt einmal, der Standardwert ist 0 und es gibt keine Begrenzung für die Häufigkeit.


>>> re.split('W+', 'Wörter, Wörter, Wörter.')

['Wörter', 'Wörter', 'Wörter', '' ]
>>> re.split('(W+)', 'Wörter, Wörter, Wörter.')
['Wörter', ', ', 'Wörter', ', ', ' Wörter', '.', '']
>>> re.split('W+', 'Wörter, Wörter, Wörter.', 1)
['Wörter', 'Wörter, Wörter .']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)

Hinweis: Das von mir verwendete Python ist 2.6, überprüfen Sie den Quellcode und stellen Sie fest, dass split() nicht über den Flags-Parameter verfügt, der in 2.7 hinzugefügt wurde. Ich habe dieses Problem mehr als einmal entdeckt. Die offizielle Dokumentation stimmt nicht mit dem Quellcode überein. Wenn Sie eine Anomalie feststellen, sollten Sie im Quellcode nach der Ursache suchen.


Wenn am Anfang oder Ende der Zeichenfolge eine Übereinstimmung vorliegt, beginnt oder endet die zurückgegebene Liste mit einer leeren Zeichenfolge.


>>> re.split('(W+)', '...Wörter, Wörter...')
['', '...', 'Wörter', ', ', 'words', '...', '']

Wenn die Zeichenfolge nicht übereinstimmen kann, wird eine Liste der gesamten Zeichenfolge zurückgegeben.

>>> re.split("a",bbb")
['bbb']

re.findall (Muster, Zeichenfolge, Flags = 0)

Suchen Sie alle mit RE übereinstimmenden Teilzeichenfolgen und geben Sie sie als Liste zurück. Die Übereinstimmungen werden in der Reihenfolge von links nach rechts zurückgegeben. Wenn es keine Übereinstimmung gibt, wird eine leere Liste zurückgegeben.

>>> re.findall("a","bcdef")
[]

>>> (r"d+","12a32bc43jf3")
['12', '32', '43', '3']

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

Suchen Sie alle mit RE übereinstimmenden Teilzeichenfolgen und geben Sie sie als Iterator zurück. Die Übereinstimmungen werden in der Reihenfolge von links nach rechts zurückgegeben. Wenn es keine Übereinstimmung gibt, wird eine leere Liste zurückgegeben.

>>> it = re.finditer(r"d+","12a32bc43jf3")
>>> group()

re.sub(pattern, repl, string, count=0, flags=0)


Suchen Sie alle mit RE übereinstimmenden Teilzeichenfolgen und verwenden Sie eine andere Zeichenfolgenersetzung. Das optionale Argument count ist die maximale Anzahl von Ersetzungen nach einer Musterübereinstimmung; die Anzahl muss eine nichtnegative ganze Zahl sein. Der Standardwert ist 0, der alle Übereinstimmungen ersetzt. Wenn keine Übereinstimmung vorliegt, wird die Zeichenfolge unverändert zurückgegeben.


re.subn(pattern, repl, string, count=0, flags=0)


hat den gleichen Effekt wie die re.sub-Methode, gibt aber a zurück new Ein Zwei-Tupel aus Zeichenfolge und Anzahl der Ersetzungsausführungen.


re.escape(string)


Escape nicht-alphanumerischer Zeichen in der Zeichenfolge


re.purge()


Löschen Sie die regulären Ausdrücke im Cache


4. Reguläres Ausdrucksobjekt

re.RegexObject


re.compile() gibt das RegexObject-Objekt zurück


re.MatchObject


group() gibt das Objekt zurück, das mit RE String


start() gibt die Position zurück, an der die Übereinstimmung beginnt


end() gibt die Position zurück, an der die Übereinstimmung endet


span() gibt zurück a Das Tupel enthält die Position der Übereinstimmung (Anfang, Ende)


5. Kompilierungsflags
Die Kompilierung Mit dem Flag können Sie einige Operationen regulärer Ausdrücke ändern. Im re-Modul kann das Flag zwei Namen verwenden, einer ist der vollständige Name, z. B. IGNORECASE, und der andere ist die Abkürzung in Ein-Buchstaben-Form, z. B. I. (Wenn Sie mit der Modusänderung von Perl vertraut sind, verwenden die Ein-Buchstaben-Formulare denselben Buchstaben; die Abkürzung für re.VERBOSE lautet beispielsweise re.X.) Mehrere Flags können durch bitweise ODER-Verknüpfung angegeben werden. Beispielsweise ist re.I |. re.M auf die Flags I und M gesetzt:


I

IGNORECASE

macht die passende Groß-/Kleinschreibung -sensitive Unempfindlich; Zeichenklassen und Zeichenfolgen ignorieren die Groß-/Kleinschreibung bei der Zuordnung von Buchstaben. Beispielsweise kann [A-Z] auch mit Kleinbuchstaben übereinstimmen, und „Spam“ kann mit „Spam“, „spam“ oder „spAM“ übereinstimmen. Dieser Kleinbuchstabe berücksichtigt nicht die aktuelle Position.


L

LOCALE

Wirkt sich auf „w“, „W“, „b“ und „B“ aus, abhängig von der aktuellen Lokalisierungseinstellung .


locales ist eine Funktion in der C-Sprachbibliothek, die zur Unterstützung bei der Programmierung verwendet wird, die verschiedene Sprachen berücksichtigen muss. Wenn Sie beispielsweise mit französischem Text arbeiten, möchten Sie „w+“ verwenden, um Text abzugleichen, „w“ stimmt jedoch nur mit der Zeichenklasse [A-Za-z] überein, es stimmt jedoch nicht mit „é“ oder „?“ überein. . Wenn Ihr System entsprechend konfiguriert ist und das Gebietsschema auf Französisch eingestellt ist, teilt eine interne C-Funktion dem Programm mit, dass „é“ auch als Buchstabe betrachtet werden soll. Die Verwendung des LOCALE-Flags beim Kompilieren eines regulären Ausdrucks führt zu einem kompilierten Objekt, das diese C-Funktionen zur Verarbeitung von „w“ verwendet. Dies ist zwar langsamer, ermöglicht Ihnen aber dennoch die Verwendung von „w+“, um französischen Text abzugleichen, wie Sie möchten.


M

MULTILINE

(^ und $ werden zu diesem Zeitpunkt nicht interpretiert; sie werden in Abschnitt 4.1 eingeführt.)


Verwenden Sie „^“, um nur den Anfang der Zeichenfolge abzugleichen, während $ nur das Ende der Zeichenfolge und das Ende der Zeichenfolge unmittelbar vor einer neuen Zeile (falls vorhanden) abgleicht. Wenn dieses Flag angegeben ist, stimmt „^“ mit dem Anfang der Zeichenfolge und dem Anfang jeder Zeile in der Zeichenfolge überein. Ebenso entspricht das Metazeichen $ dem Ende der Zeichenfolge und dem Ende jeder Zeile in der Zeichenfolge (direkt vor jeder neuen Zeile).


S

DOTALL

stellt sicher, dass das Sonderzeichen „.“ genau mit jedem Zeichen übereinstimmt, einschließlich Zeilenumbrüchen, „. " Entspricht jedem Zeichen außer Newline.


X

VERBOSE

Dieses Flag erleichtert das Verständnis des Schreibens regulärer Ausdrücke, indem es Ihnen ein flexibleres Format bietet. Wenn dieses Flag angegeben ist, werden Leerzeichen innerhalb der RE-Zeichenfolge ignoriert, es sei denn, das Leerzeichen befindet sich innerhalb einer Zeichenklasse oder nach einem Backslash. Dadurch können Sie REs klarer organisieren und einrücken. Sie können damit auch Kommentare in das RE schreiben, die von der Engine ignoriert werden. Kommentare werden mit einem „#“-Symbol gekennzeichnet, dieses Symbol darf jedoch nicht nach einer Zeichenfolge oder einem Backslash stehen.

Abschließend: Wenn Sie die String-Methode verwenden können, wählen Sie keine regulären Ausdrücke, da die String-Methode einfacher und schneller ist.

Weitere Artikel zu den regulären Ausdrucksoperationen des Re-Moduls von Python finden Sie auf der chinesischen PHP-Website!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage