Reguläre Ausdrücke in Python [mit Beispielen]: Wie implementieren?

Veröffentlicht: 2021-01-29

Bei der Verarbeitung von Rohdaten aus beliebigen Quellen ist es wichtig, die richtigen Informationen zu extrahieren, damit aus den Daten aussagekräftige Erkenntnisse gewonnen werden können. Manchmal wird es schwierig, das spezifische Muster aus den Daten zu entnehmen, insbesondere im Fall von Textdaten.

Die Textdaten bestehen aus Abschnitten von Informationen, die über Umfrageformulare, Verschrottungswebsites und andere Quellen gesammelt wurden. Das Channing verschiedener String-Zugriffsmethoden mit Pandas-Funktionen oder anderen benutzerdefinierten Funktionen kann die Arbeit erledigen, aber was ist, wenn ein spezifischeres Muster abgerufen werden muss? Reguläre Ausdrücke erledigen diese Aufgabe mit Leichtigkeit.

Inhaltsverzeichnis

Was ist ein regulärer Ausdruck (RegEx)?

Ein regulärer Ausdruck ist eine Darstellung einer Menge von Zeichen für Zeichenfolgen. Es stellt eine verallgemeinerte Formel für ein bestimmtes Muster in den Zeichenfolgen dar, die dabei hilft, die richtigen Informationen aus dem Datenpool zu trennen. Der Ausdruck besteht normalerweise aus Symbolen oder Zeichen, die bei der Bildung der Regel helfen, aber auf den ersten Blick mag er seltsam und schwer zu verstehen erscheinen. Diese Symbole haben zugeordnete Bedeutungen, die hier beschrieben werden.

Lernen Sie Datenwissenschaftskurse von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.

Metazeichen in RegEx

  1. '.': ist ein Platzhalter, entspricht einem einzelnen Zeichen (beliebiges Zeichen, aber nur einmal)
  2. ^: bezeichnet den Beginn der Zeichenfolge
  3. $: bezeichnet das Ende des Strings
  4. [ ]: stimmt mit einem der Zeichensätze innerhalb von [ ] überein
  5. [az]: entspricht einem der Zeichenbereiche a,b,…,z
  6. [^abc] : Entspricht einem Zeichen, das nicht a, b oder c ist.
  7. a|b: entspricht entweder a oder b, wobei a und b Zeichenketten sind
  8. () : Stellt den Bereich für Operatoren bereit
  9. \ : aktiviert Escape für Sonderzeichen (\t, \n, \b, \.)
  10. \b: entspricht der Wortgrenze
  11. \d : beliebige Ziffer, entspricht [0-9]
  12. \D: jede Nicht-Ziffer, äquivalent zu [^0-9]
  13. \s : beliebiger Leerraum, äquivalent zu [ \t\n\r\f\v]
  14. \S : alle Nicht-Leerzeichen, äquivalent zu [^\t\n\r\f\v]
  15. \w : beliebige alphanumerische Zeichen, äquivalent zu [a-zA-Z0-9_]
  16. \W : alle nicht-alphanumerischen Zeichen, äquivalent zu [^a-zA-Z0-9_]
  17. '*': stimmt mit null oder mehr Vorkommen überein
  18. '+': stimmt mit einem oder mehreren Vorkommen überein
  19. '?': stimmt mit null oder einem Vorkommen überein
  20. {n}: genau n Wiederholungen, n>=0
  21. {n,}: mindestens n Wiederholungen
  22. {,n}: höchstens n Wiederholungen
  23. {m,n}: mindestens m Wiederholungen und höchstens n Wiederholungen

Beispiele zum Verständnis der Problemumgehung

Nun, da Sie sich der Zeichen bewusst sind, aus denen ein RegEx besteht, sehen wir uns an, wie das funktioniert:

1. E-Mail-Filterung:

Angenommen, Sie möchten alle E-Mail-IDs aus einem langen Absatz herausfiltern. Das allgemeine Format für eine E-Mail ist:

Benutzername@Domänenname. <top_level_domain>

Der Benutzername kann alphanumerisch sein, und daher können wir \w verwenden, um sie zu bezeichnen, aber es besteht die Möglichkeit, dass der Benutzer ein Konto als vorname.nachname erstellt. Um dies anzugehen, werden wir dem Punkt entkommen und eine Reihe von Zeichen erstellen. Als nächstes sollte domain_name nur alphabetisch sein und daher wird A-Za-z dies bezeichnen. Die Top-Level-Domain ist normalerweise .com, .in, .org, aber je nach Anwendungsfall können Sie entweder den gesamten alphabetischen Bereich auswählen oder bestimmte Domains filtern.

Der reguläre Ausdruck davon sieht folgendermaßen aus:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

Hier werden auch Anfang und Ende des Musters deklariert, außerdem darf die Top-Level-Domain nur 2-4 Zeichen enthalten. Der gesamte Ausdruck hat 3 Gruppen.

2. Datumsfilterung:

Die Textinformationen, die Sie extrahieren, können die Daten enthalten, und es wird Ihnen keine separate Spalte zur Verfügung gestellt. Die Daten sind ein wesentlicher Faktor, der beim Filtern von Daten oder Zeitreihenanalysen hilft. Ein bestimmtes Datum hat das Format Datum/Monat/Jahr, wobei Datum und Monat austauschbar sind.

Auch Monate können sowohl Zahlen als auch Buchstaben sein und in Buchstaben entweder Abkürzungen oder vollständige Namen. Es hängt hauptsächlich davon ab, wie viele Fälle in unseren Daten vorhanden sind, und kann nur durch Treffer und Versuch erreicht werden.

Eine einfache RegEx, die eine Vielzahl von Daten abdeckt, ist unten dargestellt:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

Dieses Muster erfasst das Datumsformat mit einem Bindestrich oder Schrägstrich. Das Datum und der Monat sind auf eine oder zwei Ziffern und das Jahr auf bis zu vierzig Ziffern beschränkt. Die jeweiligen Entitäten werden als Gruppen erfasst, die in diesem Fall optional sind.

Lesen Sie auch: Ideen und Themen für Python-Projekte

Wie implementiert man es in Python?

Die soeben erstellten regulären Ausdrücke erfüllen die jeweiligen Kriterien, die wir angenommen haben, und jetzt ist es an der Zeit, sie in Python-Code zu implementieren. Python hat ein eingebautes Modul namens re module, das die Funktionsweise dieser Ausdrücke implementiert. Einfach,

importieren re

Muster = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

Das Re-Modul bietet eine breite Palette von Funktionen und alle haben unterschiedliche Anwendungsfälle. Schauen wir uns einige der wichtigen Funktionen an:

  1. re.findall(): Diese Funktion gibt die Liste aller Übereinstimmungen in der Testzeichenfolge basierend auf dem übergebenen Muster zurück. Betrachten Sie dieses Beispiel:

string = '25-12-1999 zufälliger Text hier 25.12.1999'

print(re.findall(Muster, String))

Es werden nur die Daten aus der Zeichenfolge in einer Liste zurückgegeben.

  1. re.sub(): Sub in dieser Funktion steht für Substitution und tut dasselbe. Er ersetzt die Streichhölzer mit dem angegebenen Wiederbeschaffungswert. Die Funktion übernimmt Muster, Zeichenfolge, Ersatzwert und optionale Parameter der Zählung. Der count-Parameter steuert, wie viele Vorkommen Sie ersetzen möchten. Standardmäßig ersetzt es alle und gibt die neue Zeichenfolge zurück.
  2. re.split(): Es teilt die Zeichenfolge an den übereinstimmenden Stellen auf und gibt die Teile als separate Zeichenfolgen in einer Liste zurück.
  3. re.search(): Diese Funktion gibt das Übereinstimmungsobjekt zurück, das die in der Zeichenfolge gefundene Übereinstimmung zusammen mit allen erfassten Gruppen enthält. Dies kann praktisch sein, wenn Sie diese Gruppen als separate Spalten speichern möchten.

Um dies auszuführen:

match = re.search(Muster, Zeichenkette)

match.group(1)

Gruppe(0) gibt die gesamte Übereinstimmung zurück und entsprechende nächste Zahlen bezeichnen andere Gruppen.

Checkout: Gehalt für Python-Entwickler in Indien

Fazit

Reguläre Ausdrücke sind eine leistungsstarke Möglichkeit, Muster in Textdaten zu erfassen. Es kann etwas mehr Aufwand erfordern, die verschiedenen Zeichen zu beherrschen, aber es vereinfacht den Prozess der Datenextraktion in komplexen Anwendungsfällen.

Nennen Sie einige Beispiele für reguläre Ausdrücke in Python.

Die folgenden Beispiele veranschaulichen die Funktionsweise bzw. reguläre Ausdrücke in Python:
A. E-Mail-Filterung
Die regulären Ausdrücke können effizient zum Filtern von E-Mails verwendet werden. Die reguläre Syntax für die E-Mail-Filterung lautet - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
Dieser Ausdruck ist in drei Gruppen unterteilt und deckt viele Fälle ab, einschließlich - wenn der Benutzername alphanumerisch ist und wenn er einen Punkt enthält, z. B. „erster.letzter@“. Dieser Ausdruck wird für Top-Domains verwendet, die 2-4 Zeichen enthalten.
B. Datumsfilterung
Daten können ein entscheidender Faktor beim Umgang mit der Datenfilterung sein. Die Textdaten, mit denen Sie es zu tun haben, enthalten oft Datumsangaben. Der reguläre Ausdruck oder RegEx, der die Daten aus einem normalen Text extrahiert, ist - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
Das Datum und der Monat können aus bis zu 2 Ziffern bestehen, während der Monat aus bis zu 4 Ziffern bestehen kann.

Welche Funktionen sind an der Implementierung regulärer Ausdrücke in Python beteiligt?

Folgende Funktionen sind an der Implementierung von regulären Ausdrücken in Python beteiligt:
1. re.findall() – Diese Funktion akzeptiert ein Muster, das mit der Textzeichenfolge abgeglichen werden soll. Es gibt die Zeichenfolgen zurück, die übereinstimmen.
2. re.sub() - Sub in „re.sub“ steht für „Substitution“. Diese Methode führt genau dieselbe Funktion aus wie die Funktion „re.findall()“.
3. re.split() - Es trennt die Strings um das Trennzeichen herum, das ihm als Parameter übergeben werden soll. Das Trennzeichen kann alles sein.
4. re.search() – Diese Funktion gibt die in der Zeichenfolge gefundene Übereinstimmung zusammen mit anderen Zeichenfolgengruppen zurück, die sie erfasst hat.

Welche speziellen Sequenzen werden in regulären Ausdrücken verwendet?

Im Folgenden sind einige der speziellen Sequenzen aufgeführt, die in regulären Ausdrücken verwendet werden:
1. A: Überprüfen Sie, ob die Zeichenfolge mit dem angegebenen Zeichen beginnt.
2. (Forward Slash) b: Überprüft, ob die Zeichenfolge mit dem angegebenen Zeichen beginnt oder endet. (String)/b sucht nach dem Anfang, während (Backslash) b (String) nach dem Ende sucht.
3. B: Es ist genau gegenüber dem b. Überprüft, ob die Zeichenfolge nicht mit dem angegebenen Zeichen beginnt.
4. d: Überprüft die numerischen Werte in der Zeichenfolge.
5. D: Sucht nach nicht numerischen Werten oder Zeichen.
6. s: Sucht nach Leerzeichen.
7. S: Sucht nach Nicht-Leerzeichen.
8. w: Sucht nach alphanumerischen Zeichen.
9. W: Sucht nach nicht alphanumerischen Zeichen.