Dokumentation für das Re-Modul für Python 3 in . Re-Modul für reguläre Ausdrücke

Reguläre Ausdrücke sind ein sehr beliebter Bestandteil fast aller Programmiersprachen. Sie helfen Ihnen, schnell auf die benötigten Informationen zuzugreifen. Sie werden insbesondere dann verwendet, wenn Text verarbeitet werden muss. Python wird standardmäßig mit einem speziellen Modul geliefert. re, das für die Arbeit mit regulären Ausdrücken zuständig ist.

Heute werden wir ausführlich darüber sprechen, was es im Allgemeinen ist, wie man mit ihnen arbeitet und wie das Modul funktioniert re wird helfen.

Reguläre Ausdrücke: eine Einführung

Wozu dienen reguläre Ausdrücke? Fast alles. Zum Beispiel diese:

  1. Webanwendungen, die eine Textvalidierung erfordern. Ein typisches Beispiel sind Online-Mail-Clients.
  2. Alle anderen Projekte im Zusammenhang mit Texten, Datenbanken usw.

Bevor wir mit dem Parsen der Syntax beginnen, sollten wir die Grundprinzipien der Funktionsweise der Bibliothek genauer verstehen re und überhaupt, was daran gut ist. Wir werden auch Beispiele aus der Praxis geben, wo wir den Mechanismus ihrer Verwendung beschreiben werden. Sie können eine solche Vorlage erstellen, die für Sie geeignet ist, um eine Vielzahl von Operationen mit Text durchzuführen.

Was ist eine Vorlage in der Re-Bibliothek?

Damit können Sie nach Informationen unterschiedlicher Art suchen, ihnen entsprechende Informationen erhalten, um andere Funktionen anpassungsfähiger zu machen. Und natürlich, um diese Daten zu verarbeiten.

Nehmen Sie zum Beispiel die folgende Vorlage: s+. Es bedeutet ein beliebiges Leerzeichen. Wenn Sie ein Pluszeichen hinzufügen, bedeutet dies, dass das Muster mehr als ein Leerzeichen enthält. Es kann sogar Tabulatorzeichen abgleichen, mit denen aufgerufen wird t+.

Bevor Sie sie verwenden, müssen Sie die Bibliothek importieren Re. Danach verwenden wir einen speziellen Befehl, um die Vorlage zu kompilieren. Dies geschieht in zwei Schritten.

>>> Importieren

>>> Regex = re.compile('s+')

Insbesondere führt dieser Code den Vorgang des Kompilierens einer Vorlage aus, die verwendet werden kann. zum Beispiel, um nach Leerzeichen (einem oder mehreren) zu suchen.

Abrufen separater Informationen aus verschiedenen Zeichenfolgen mithilfe regulärer Ausdrücke

Angenommen, wir haben eine Variable, die die folgenden Informationen enthält.

>>> text = „““100 INF Informatik

213 MAT Mathematik  

156 GER Deutsch»»»

Es enthält drei Schulungen. Jeder von ihnen besteht aus drei Teilen – Nummer, Code und Name. Wir sehen, dass das Intervall zwischen diesen Wörtern unterschiedlich ist. Was tun, um diese Zeile in einzelne Zahlen und Wörter aufzuteilen? Es gibt zwei Methoden, um dieses Ziel zu erreichen:

  1. eine Funktion aufrufen neu aufteilen.
  2. Funktion anwenden gespalten für Regex.

Hier ist ein Beispiel für die Verwendung der Syntax jeder der Methoden für unsere Variable.

>>> re.split('s+', text)  

# oder

>>> regex.split(text)

Ausgabe: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Im Allgemeinen können beide Methoden verwendet werden. Aber es ist tatsächlich viel einfacher, einen regulären Ausdruck zu verwenden, anstatt die Funktion mehrmals zu verwenden. neu aufteilen.

Übereinstimmungen finden mit drei Funktionen

Nehmen wir an, wir müssen nur Zahlen aus einer Zeichenfolge extrahieren. Was muss dafür getan werden?

re.findall()

Hier ist ein Anwendungsfall für die Funktion finde alle(), mit dem Sie zusammen mit regulären Ausdrücken das Vorkommen einer oder mehrerer Zahlen aus einer Textvariablen extrahieren können.

>>> Druck(text)  

100 INF Informatik

213 MAT Mathematik  

156 DEU Englisch

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(Text)  

['100', '213', '156']

Zusammen mit dem d-Symbol haben wir eine Vorlage verwendet, die absolut jeden numerischen Wert anzeigt, der sich in einer Variablen oder einem Text befindet. Und da wir dort ein + hinzugefügt haben, bedeutet dies, dass mindestens eine Zahl vorhanden sein muss. 

Sie können auch das *-Zeichen verwenden, um anzugeben, dass das Vorhandensein einer Ziffer nicht erforderlich ist, damit eine Übereinstimmung gefunden wird.

Aber in unserem Fall haben wir, da wir + verwendet haben, mit extrahiert finde alle() 1 oder mehrere digitale Kursbezeichnungen aus dem Text. In unserem Fall fungieren also reguläre Ausdrücke als Einstellungen für die Funktion.

re.search() vs re.match()

Wie Sie aus dem Namen der Funktionen erraten können, sucht die erste nach einer Übereinstimmung im Text. Frage: Was ist der Unterschied zwischen finde alle? Der Punkt ist, dass es ein bestimmtes Objekt zurückgibt, das dem Muster entspricht, und nicht die gesamte Folge von gefundenen Ergebnissen in Form einer Liste, wie die vorherige Funktion.

Die re.match-Funktion wiederum tut dasselbe. Nur die Syntax ist anders. Die Vorlage muss am Anfang platziert werden. 

Nehmen wir ein Beispiel, das dies demonstriert.

>>> # eine Variable mit Text erstellen

>>> text2 = «»»INF Informatik

213 MAT Mathematik 156″»»  

>>> # Regex kompilieren und nach Mustern suchen

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Erster Index: ', s.start())  

>>> print('Letzter Index: ', am Ende())  

>>> print(text2[s.start():s.end()]) 

Erster Index: 17 

Letzter Index: 20

213

Wenn Sie ein ähnliches Ergebnis auf andere Weise erhalten möchten, können Sie die Funktion verwenden Gruppe().

Ersetzen eines Teils des Textes durch die Re-Bibliothek

Um Text zu ersetzen, verwenden Sie die Funktion re.sub(). Angenommen, unsere Liste der Kurse hat sich ein wenig geändert. Wir sehen, dass wir nach jedem digitalen Wert eine Registerkarte haben. Unsere Aufgabe ist es, all diese Sequenzen zu einer Linie zusammenzufassen. Dazu müssen wir den Ausdruck s+ ersetzen passieren 

Der Originaltext lautete:

# Erstellen Sie eine Variable mit Text

>>> text = „““100 INF t Informatik

213 MAT t Mathe  

156 DEU t Deutsch»»»  

>>> Druck(text)  

100 INFO Информатика

213 MAT Mathematik  

156 ANG Englisch

Um die gewünschte Operation auszuführen, haben wir die folgenden Codezeilen verwendet.

# ein oder mehrere Leerzeichen durch 1 ersetzen

>>> Regex = re.compile('s+')  

>>> print(regex.sub(' ', text))  

Als Ergebnis haben wir eine Linie. 

101 COM Computer 205 MAT Mathematik 189 ENG Englisch

Betrachten Sie nun ein anderes Problem. Wir stehen nicht vor der Aufgabe, Leerzeichen zu setzen. Viel wichtiger ist uns, dass alle Kursnamen in einer neuen Zeile beginnen. Dazu wird ein weiterer Ausdruck verwendet, der der Ausnahme einen Zeilenumbruch hinzufügt. Was ist das für ein Ausdruck?

Bibliothek Re unterstützt eine Funktion wie Negativabgleich. Es unterscheidet sich vom direkten dadurch, dass es ein Ausrufezeichen vor dem Schrägstrich enthält. Das heißt, wenn wir das Zeilenumbruchzeichen überspringen müssen, müssen wir !n anstelle von n schreiben.

Wir erhalten den folgenden Code.

# Alle Leerzeichen außer Newline entfernen  

>>> Regex = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', text))  

100 INF Informatik

213 MAT Mathematik  

156 DEU Englisch

Was sind reguläre Ausdrucksgruppen?

Mit Hilfe von Gruppen regulärer Ausdrücke können wir die gewünschten Objekte in Form von separaten Elementen und nicht in einer Zeile erhalten. 

Angenommen, wir müssen die Kursnummer, den Code und den Namen nicht in einer Zeile, sondern als separate Elemente erhalten. Um die Aufgabe abzuschließen, müssen Sie eine große Anzahl unnötiger Codezeilen schreiben. 

Tatsächlich kann die Aufgabe stark vereinfacht werden. Sie können die Vorlage für alle Einträge zusammenstellen und nur die Daten angeben, die Sie aus den Klammern erhalten müssen.

Es wird eine sehr kleine Anzahl von Zeilen geben. 

# Erstellen Sie Gruppen von Kurstextvorlagen und extrahieren Sie sie

>>> Kursmuster = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(Kursmuster, Text)  

[('100', 'INF', 'Informatik'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

Das Konzept des „gierigen“ Matchings

Standardmäßig sind reguläre Ausdrücke so programmiert, dass sie die maximale Menge an übereinstimmenden Daten extrahieren. Und selbst wenn Sie viel weniger brauchen.

Sehen wir uns einen Beispiel-HTML-Code an, in dem wir das Tag abrufen müssen.

>>> text = „Beispiel für Greedy Regular Expression Matching“  

>>> re.findall('', text)  

['Beispiel für Greedy Regular Expression Matching']

Anstatt nur ein Tag zu extrahieren, hat Python die gesamte Zeichenfolge erhalten. Deshalb wird es gierig genannt.

Und was tun, um nur das Tag zu bekommen? In diesem Fall müssen Sie Lazy Matching verwenden. Um einen solchen Ausdruck anzugeben, wird am Ende des Musters ein Fragezeichen hinzugefügt.

Sie erhalten den folgenden Code und die Ausgabe des Interpreters.

>>> re.findall('', text)  

[“, ”]

Wenn es erforderlich ist, nur das erste Auftreten zu erhalten, wird die Methode verwendet Suche ().

re.search('', text).group()  

"

Dann wird nur das öffnende Tag gefunden.

Beliebte Ausdrucksvorlagen

Hier ist eine Tabelle mit den am häufigsten verwendeten regulären Ausdrucksmustern.

Dokumentation für das Re-Modul für Python 3 in . Re-Modul für reguläre Ausdrücke

Zusammenfassung

Wir haben nur die grundlegendsten Methoden zum Arbeiten mit regulären Ausdrücken betrachtet. Auf jeden Fall haben Sie gesehen, wie wichtig sie sind. Dabei spielt es keine Rolle, ob es darum geht, den gesamten Text oder einzelne Fragmente zu parsen, ob es darum geht, einen Beitrag in einem sozialen Netzwerk zu analysieren oder Daten zu sammeln, um ihn später zu verarbeiten. Reguläre Ausdrücke sind dabei ein zuverlässiger Helfer.

Sie ermöglichen Ihnen die Ausführung von Aufgaben wie:

  1. Angabe des Formats der Daten, z. B. E-Mail-Adresse oder Telefonnummer.
  2. Eine Zeichenfolge erhalten und in mehrere kleinere Zeichenfolgen aufteilen.
  3. Führen Sie verschiedene Operationen mit Text durch, z. B. Suchen, Extrahieren der erforderlichen Informationen oder Ersetzen eines Teils der Zeichen.

Mit regulären Ausdrücken können Sie auch nicht-triviale Operationen ausführen. Auf den ersten Blick ist es nicht einfach, diese Wissenschaft zu beherrschen. Aber in der Praxis ist alles standardisiert, also reicht es aus, es einmal herauszufinden, danach kann dieses Tool nicht nur in Python, sondern auch in jeder anderen Programmiersprache verwendet werden. Sogar Excel verwendet reguläre Ausdrücke, um die Datenverarbeitung zu automatisieren. Es ist also eine Sünde, dieses Tool nicht zu verwenden.

Hinterlassen Sie uns einen Kommentar