Tutorial zu regulären Python-Ausdrücken | Tutorial von Python Regex

Inhalt

Relevanz von regulären Ausdrücken

In den vergangenen Jahren, es hat eine dramatische Verschiebung bei der Verwendung von Allzweck-Programmiersprachen für Data Science und maschinelles Lernen gegeben. Das war nicht immer so: vor einem Jahrzehnt, Dieser Gedanke wäre vielen skeptischen Augen begegnet!

Das bedeutet, dass mehr Menschen / Institutionen verwenden Tools wie Python / JavaScript, um Ihre Datenanforderungen zu erfüllen. Hier werden reguläre Ausdrücke sehr nützlich. Reguläre Ausdrücke sind in den meisten dieser Tools regelmäßig die Standardmethode zum Bereinigen und Anfechten von Daten.. Entweder das Extrahieren bestimmter Textteile aus Webseiten, Machen Sie einen Sinn aus Twitter-Daten oder bereiten Sie Ihre Daten für das Text-Mining vor, regex ist die beste Wahl für all diese Aufgaben.

Aufgrund seiner Anwendbarkeit, es ist sinnvoll, sie zu kennen und richtig einzusetzen.

Was wirst du aus diesem Beitrag lernen?

In diesem Beitrag, Ich werde Sie durch die Verwendung führen, Beispiele und Anwendungen von regulären Ausdrücken. Reguläre Ausdrücke sind bei Programmierern sehr beliebt und können in vielen Programmiersprachen wie Java angewendet werden, JS, php, C ++, etc. Um unser Verständnis zu entwickeln, wir haben dieses Konzept mit der Programmiersprache Python erklärt. Bis zum Ende, Ich habe verschiedene Probleme mit Regex gelöst.

lerne reguläre Ausdrücke in Python

Lass uns anfangen!

Was ist ein regulärer Ausdruck und wie wird er verwendet??

Knapp, Regulärer Ausdruck ist eine Folge von Zeichen, die hauptsächlich zum Suchen und Ersetzen von Mustern in einer Zeichenfolge oder Datei verwendet wird. Wie ich bereits erwähnte, sind mit den meisten Programmiersprachen wie Python kompatibel, perl, R, Java und viele andere. Dann, Sie zu lernen hilft in mehrfacher Hinsicht (Mehr dazu später).

Reguläre Ausdrücke verwenden zwei Arten von Zeichen:

ein) Metazeichen: wie der Name schon sagt, diese zeichen haben eine besondere bedeutung, gleichwertig * im Joker.

B) Literale (mögen, B, 1,2…)

Und Python, wir haben das modul “betreffendWas hilft bei regulären Ausdrücken. Dann müssen Sie die Bibliothek importieren betreffend bevor Sie reguläre Ausdrücke in Python verwenden können.

Verwenden Sie diesen Code --> Importieren

Die häufigsten Verwendungen von regulären Ausdrücken sind:

  • Suche nach einer Zeichenfolge (suchen und abgleichen)
  • Suche eine Zeichenfolge (finde alle)
  • Brechen Sie die Zeichenfolge in eine Teilzeichenfolge auf (Teilen)
  • Teil einer Zeichenfolge ersetzen (unter)

Sehen wir uns die Methoden an, die die Bibliothek “betreffend”Sorgt für die Durchführung dieser Aufgaben.

Notiz: Wir haben auch ein Videokurs zur Verarbeitung natürlicher Sprache, die auch reguläre Ausdrücke umfasst. prüfen Sie!

Was sind die verschiedenen Regex-Methoden??

Das 're-Paket’ bietet verschiedene Methoden zum Abfragen einer Eingabezeichenfolge. Hier sind die am häufigsten verwendeten Methoden, Ich werde diskutieren:

  1. Rückkampf()
  2. untersuchen()
  3. wiederfinden ()
  4. re.split ()
  5. re.sub ()
  6. neu kompilieren ()

Sehen wir sie uns einzeln an.

Rückkampf(Muster, Seil):

Diese Methode findet eine Übereinstimmung, wenn sie am Anfang der Zeichenfolge auftritt. Als Beispiel, Anruf-Match () en la cadena 'AV Analytics AV’ und suche nach einem 'AV-Muster’ Wird zusammenpassen. Trotz dieses, wenn wir nur nach Analytics suchen, das Muster wird nicht übereinstimmen. Machen wir es jetzt in Python.

Hier ist ein Live-Encoding-Fenster, um Ihnen den Einstieg zu erleichtern. Sie können die Codes ausführen und das Ergebnis in diesem Fenster abrufen:

Oben sehen Sie die Start- und Endposition des passenden Musters 'AV’ am Seil und, manchmal, hilft sehr bei der Seilmanipulation.

untersuchen(Muster, Seil):

Es ist äquivalent zu match () aber es beschränkt uns nicht darauf, nur am Anfang der Zeichenfolge nach Übereinstimmungen zu suchen. Im Gegensatz zur vorherigen Methode, hier die Suche nach dem 'Analytics Pattern’ wird ein Spiel zurückgeben.

Code

Ergebnis = betreffend.Suche(r'Analytik', 'AV DataPeaker-AV')
drucken Ergebnis.Gruppe(0)
Ausgabe:
Analytik

Hier sehen Sie, dass die Suchmethode () kann ein Muster von jeder Position in der Zeichenfolge finden, aber es gibt nur das erste Vorkommen des Suchmusters zurück.

wiederfindenMuster, Seil):

Dass hilft, eine Liste aller passenden Muster zu erhalten. Sie haben keine Suchbeschränkungen von Anfang oder Ende. Wenn wir die findall-Methode verwenden, um nach 'AV . zu suchen’ in einer bestimmten Zeichenfolge, gibt beide Vorkommen von AV . zurück. Bei der Suche nach einer Zeichenfolge, Ich würde empfehlen, dass Sie verwenden wiederfinden () bis in alle Ewigkeit, kann als re.search arbeiten () y re.match () beide.

Code

Ergebnis = betreffend.finde alle(Bernstein', 'AV DataPeaker-AV')
drucken Ergebnis

Ausgabe:
['VON', 'VON']

re.splitMuster, Seil, [maxsplit=0]):

Diese Methode hilft beim Teilen Seil durch Vorkommen von gegeben Muster.

Code

Ergebnis=betreffend.Teilt(r'y','Analytik')
Ergebnis

Ausgabe:
['Anal', 'Tics']

Über, wir haben die kette geteilt “Analytik” von “Ja”. Die Split-Methode () hat ein anderes Argument “maxsplit“. Hat einen Standardwert von Null. Unter diesen Umständen macht es die maximalen Divisionen, die gemacht werden können, aber wenn wir maxsplit einen Wert geben, wird die Kette spalten. Sehen wir uns das folgende Beispiel an:

Code

Ergebnis=betreffend.Teilt(r'i','DataPeaker')
Druckergebnis

Ausgabe:
['Analyt', 'cs V', 'dhya'] #Es hat alle Splits ausgeführt, die nach Mustern durchgeführt werden können "ich".

Code

Ergebnis=betreffend.Teilt(r'i','DataPeaker',maxsplit=1)
Ergebnis

Ausgabe:
['Analyt', 'cs Vidya']

Hier, Sie können sehen, dass wir maxsplit in gesetzt haben 1. Und das Ergebnis ist, dass es nur zwei Werte hat, während das erste Beispiel drei Werte hat.

re.subMuster, Responder, Seil):

Hilft, ein Muster zu finden und es durch eine neue Teilzeichenfolge zu ersetzen. Wenn das Muster nicht gefunden wird, Seil wird unverändert zurückgegeben.

Code

Ergebnis=betreffend.unter(r'Indien','die Welt',„AV ist die größte Analytics-Community Indiens“)
Ergebnis
Ausgabe:
'AV ist die größte Analytics-Community der Welt'

neu kompilierenMuster, Responder, Seil):

Wir können ein Regex-Muster zu Musterobjekten kombinieren, die verwendet werden können, um Muster abzugleichen. Es ist auch nützlich, erneut nach einem Muster zu suchen, ohne es erneut einzugeben..

Code

importieren betreffend
Muster=betreffend.kompilieren('VON')
Ergebnis=Muster.finde alle('AV DataPeaker-AV')
drucken Ergebnis
Ergebnis2=Muster.finde alle(„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis2
Ausgabe:
['VON', 'VON']
['VON']

Kurze Zusammenfassung verschiedener Methoden:

Bis jetzt, wir analysieren verschiedene Regex-Methoden mit einem konstanten Muster (feste Zeichen). Aber, Was ist, wenn wir kein konstantes Suchmuster haben und einen bestimmten Satz von Zeichen zurückgeben möchten? (durch eine Regel definiert) einer Kette? Lass dich nicht einschüchtern.

Dies lässt sich leicht lösen, indem man einen Ausdruck mit Hilfe von Musteroperatoren definiert (Meta- und Literalzeichen). Schauen wir uns die gängigsten Musteroperatoren an.

Was sind die am häufigsten verwendeten Operatoren??

Reguläre Ausdrücke können Muster angeben, nicht nur feste Zeichen. Dies sind die am häufigsten verwendeten Operatoren, die dabei helfen, einen Ausdruck zu generieren, um die erforderlichen Zeichen in einer Zeichenfolge oder Datei darzustellen. Wird häufig beim Web-Scraping und Text-Mining verwendet, um erforderliche Informationen zu extrahieren.

Betreiber Beschreibung
. Entspricht jedem einzelnen Zeichen außer der neuen Zeile ‘ n'.
? einverstanden mit 0 Ö 1 Aussehen des Musters auf Ihrer linken Seite
+ 1 oder mehr Vorkommen des Musters zu Ihrer Linken
* 0 oder mehr Auftritte des Musters zu Ihrer Linken
w Entspricht einem alphanumerischen Zeichen, während W (W mayúscula) entspricht einem nicht-alphanumerischen Zeichen.
D Ziffernübereinstimmungen [0-9] Ja / D (D mayúscula) stimmt mit keinen ziffern überein.
S Entspricht einem einzelnen Leerzeichen (Raum, Neue Zeile, Rückkehr, tabellarisch, Form) y S (S mayúscula) stimmt mit jedem Nicht-Leerzeichen-Zeichen überein.
B Grenze zwischen Wort und Nicht-Wort und / B ist gegenüber / B
[..] Entspricht einem einzelnen Zeichen in einer Klammer und [^..] stimmt mit jedem einzelnen Zeichen überein, das nicht in Klammern steht
Wird für Sonderzeichen wie verwendet . mit einem Punkt zusammenfallen oder + für das Pluszeichen.
^ und $ ^ und $ Übereinstimmung mit dem Anfang bzw. Ende der Zeichenfolge
{New-Mexiko} Es stimmt mit mindestens n und höchstens m Vorkommen des vorhergehenden Ausdrucks überein, wenn wir ihn schreiben als {, m} dann gibt es mindestens jedes minimale Vorkommen bis zum maximalen m vorhergehenden Ausdruck zurück.
ein | B Entspricht a oder b
() Reguläre Ausdrücke gruppieren und übereinstimmenden Text zurückgeben
T, n, R Registerkarte "Übereinstimmungen", Neue Zeile, Rückkehr

Weitere Informationen zu Metazeichen “(“, “)”, “|” und andere Details, Sie können diesen Link überprüfen (https://docs.python.org/2/library/re.html).

Jetzt, Lassen Sie uns die Musteroperatoren anhand der folgenden Beispiele verstehen.

Einige Beispiele für reguläre Ausdrücke

Ärger 1: Gibt das erste Wort einer gegebenen Zeichenfolge zurück

Lösung-1 Extrahiere jedes Zeichen (mit “ w)

Code

importieren betreffend
Ergebnis=betreffend.finde alle(R'.',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis

Ausgabe:
['EIN', 'V', ' ', 'ich', 'S', ' ', 'l', 'ein', 'R', 'g', 'e', 'S', 'T', ' ', 'EIN', 'n', 'ein', 'l', 'und', 'T', 'ich', 'C', 'S', ' ', 'C', 'Ö', 'm', 'm', 'du', 'n', 'ich', 'T', 'und', ' ', 'Ö', 'F', ' ', 'ICH', 'n', 'D', 'ich', 'ein']

Oben extrahiert auch Leerzeichen, jetzt, um zu verhindern, dass es verwendet wird “ w” anstatt “.“.

Code

Ergebnis=betreffend.finde alle(r'w',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis

Ausgabe:
['EIN', 'V', 'ich', 'S', 'l', 'ein', 'R', 'g', 'e', 'S', 'T', 'EIN', 'n', 'ein', 'l', 'und', 'T', 'ich', 'C', 'S', 'C', 'Ö', 'm', 'm', 'du', 'n', 'ich', 'T', 'und', 'Ö', 'F', 'ICH', 'n', 'D', 'ich', 'ein']

Lösung-2 Extrahiere jedes Wort (mit “*” Ö “+)

Code

Ergebnis=betreffend.finde alle(r'w*',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis

Ausgabe:
['VON', '', 'ist', '', 'größten', '', 'Analytik', '', 'Gemeinschaft', '', 'von', '', 'Indien', '']

Ein Mal noch, gibt das Leerzeichen als Wort zurück, weil “*”Gibt null oder mehr Musterübereinstimmungen links davon zurück. Jetzt, um die Leerzeichen zu löschen, wir gehen mit “+“.

Code

Ergebnis=betreffend.finde alle(r'w+',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis
Ausgabe:
['VON', 'ist', 'größten', 'Analytik', 'Gemeinschaft', 'von', 'Indien']

Lösung-3 Extrahiere jedes Wort (mit “^)

Code

Ergebnis=betreffend.finde alle(r'^w+',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis

Ausgabe:
['VON']

Wenn wir "$" anstelle von "^" verwenden, gibt das Wort vom Ende der Zeichenfolge zurück. Veámoslo.

Code

Ergebnis=betreffend.finde alle(r'w+$',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis
Ausgabe:

['Indien']

Ärger 2: Gibt die ersten beiden Zeichen jedes Wortes zurück

Lösung-1 Extrahiere zwei aufeinanderfolgende Zeichen aus jedem Wort, ohne Leerzeichen (mit “ w)

Code

result=re.findall(r'ww',„AV ist die größte Analytics-Community Indiens“)
Druckergebnis

Ausgabe:
['VON', 'ist', 'das', 'rg', 'es ist', 'Ein', 'al', 'yt', 'NS', 'co', 'mm', 'ein', 'es', 'von', 'In', 'von']

Lösung-2 Extrahieren Sie zwei aufeinanderfolgende Zeichen aus denen, die am Anfang der Wortgrenze verfügbar sind (mit “B)

Ergebnis=betreffend.finde alle(r'bw.',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis

Ausgabe:
['VON', 'ist', 'das', 'Ein', 'co', 'von', 'In']

Ärger 3: Gibt den Domänentyp der angegebenen E-Mail-IDs zurück

Um es einfach zu erklären, Ich werde wieder Schritt für Schritt vorgehen:

Lösung-1 Extrahiere alle Zeichen nach “@”

Code

Ergebnis=betreffend.finde alle(r'@w+','[E-Mail geschützt], [E-Mail geschützt], [E-Mail geschützt], [E-Mail geschützt]') 
drucken Ergebnis 
Ausgabe: ['@googlemail', '@Prüfung', '@analyticsvidhya', '@sich ausruhen']

Über, Sie können sehen, dass das Teil “.mit”, “.In” es wird nicht extrahiert. Um es hinzuzufügen, wir gehen mit dem folgenden Code.

result=re.findall(r'@w+.w+','[E-Mail geschützt], [E-Mail geschützt], [E-Mail geschützt], [E-Mail geschützt]')
Druckergebnis
Ausgabe:
['@googlemail.com', '@test.in', '@analyticsvidhya.com', '@rest.biz']

Lösung – 2 Extrahieren Sie nur den Domainnamen mit “()”

Code

result=re.findall(r'@w+.(w+)','[E-Mail geschützt], [E-Mail geschützt], [E-Mail geschützt], [E-Mail geschützt]')
Druckergebnis
Ausgabe:
['mit', 'in', 'mit', 'Branche']

Ärger 4: Rückgabedatum der angegebenen Zeichenfolge

Hier verwenden wir “D”Um die Ziffer zu extrahieren.

Lösung:

Code

result=re.findall(r'd{2}-D{2}-D{4}','Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, ABC 67-8945 12-01-2009')
Druckergebnis
Ausgabe:
['05.12.2007', '11-11-2011', '01.12.2009']

Wenn Sie nur ein Jahr extrahieren möchten, die Klammer"()" es wird dir helfen.

Code


Ergebnis=betreffend.finde alle(r'd{2}-D{2}-(D{4})','Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, ABC 67-8945 12-01-2009')
drucken Ergebnis
Ausgabe:
['2007', '2011', '2009']

Ärger 5: Gibt alle Wörter in einer Zeichenfolge zurück, die mit einem Vokal beginnen

Lösung-1 Gibt jedes Wort zurück

Code

Ergebnis=betreffend.finde alle(r'w+',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis

Ausgabe:
['VON', 'ist', 'größten', 'Analytik', 'Gemeinschaft', 'von', 'Indien']

Lösung-2 Return-Wörter beginnen mit Alphabeten (mit [])

Code

Ergebnis=betreffend.finde alle(R'[aeiouAEIOU]w+',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis

Ausgabe:
['VON', 'ist', 'größte', 'Analytik', 'Gemeinschaft', 'von', 'Indien']

Oben sehen Sie, dass es zurückgekehrt ist “argest” Ja “Gemeinschaft” aus der Mitte der Worte. Um diese beiden zu löschen, wir müssen verwenden ” B” für die Grenze des Wortes.

Lösung 3

Code

Ergebnis=betreffend.finde alle(r'b[aeiouAEIOU]w+',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis 

Ausgabe:
['VON', 'ist', 'Analytik', 'von', 'Indien']

Äquivalent, Wir können Wörter extrahieren, die mit konstant beginnen, indem wir "^" in Klammern verwenden.

Code

Ergebnis=betreffend.finde alle(r'b[^ aeiouAEIOU]w+',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis

Ausgabe:
[' ist', ' größten', 'Analytik', ' Gemeinschaft', ' von', 'Indien']

Oben sehen Sie, dass Sie Wörter zurückgegeben haben, die mit Leerzeichen beginnen. Um es aus der Ausgabe zu entfernen, ein Leerzeichen in Klammern einfügen[].

Code

Ergebnis=betreffend.finde alle(r'b[^ aeiouAEIOU ]w+',„AV ist die größte Analytics-Community Indiens“)
drucken Ergebnis

Ausgabe:
['größten', 'Gemeinschaft']


Ärger 6: eine Telefonnummer bestätigen (die telefonnummer muss haben 10 Ziffern und beginnen mit 8 Ö 9)

Wir haben eine Liste mit Telefonnummern auf der Liste “Bei der” und hier werden wir die Telefonnummern validieren mit

Lösung

Code

Importieren
li=['999999999','999999-999','99999x9999']
für val in li:
 wenn re.match(R'[8-9]{1}[0-9]{9}',val) und len(val) == 10:
     'ja' drucken
 anders:
     'Nein' drucken
Ausgabe:
Jawohl
Nein
Nein

Ärger 7: Teilen Sie eine Zeichenfolge mit vielen Trennzeichen

Lösung

Code

importieren betreffend
Leitung = 'asdf fjdk;gefesselt,fjek,asdf,foo' # String hat mehrere Trennzeichen (";",","," ").
Ergebnis= betreffend.Teilt(R'[;,S]', Leitung)
drucken Ergebnis

Ausgabe:
['asdf', 'fjdk', 'gefüttert', 'fjek', 'asdf', 'foo']

Wir können auch die Methode verwenden re.sub () um diese mehrfachen Trennzeichen durch eins als Leerzeichen zu ersetzen "".

Code

importieren betreffend
Leitung = 'asdf fjdk;gefesselt,fjek,asdf,foo'
Ergebnis= betreffend.unter(R'[;,S]',' ', Leitung)
drucken Ergebnis

Ausgabe:
asdf fjdk afed fjek asdf foo

Ärger 8: Informationen aus einer HTML-Datei abrufen

Ich möchte Informationen aus einer HTML-Datei extrahieren (siehe Beispieldaten unten). Hier müssen wir die verfügbaren Informationen extrahieren zwischen

Ja

außer dem ersten numerischen Index. Ich bin hier davon ausgegangen, dass der folgende HTML-Code in einem String gespeichert ist str.

Beispiel für eine HTML-Datei (str)

<tr ausrichten="Center"><td>1</td> <td>Noah</td> <td>Emma</td></tr>
<tr ausrichten="Center"><td>2</td> <td>Liam</td> <td>Olivia</td></tr>
<tr ausrichten="Center"><td>3</td> <td>Mason</td> <td>Sophia</td></tr>
<tr ausrichten="Center"><td>4</td> <td>Jakob</td> <td>Isabella</td></tr>
<tr ausrichten="Center"><td>5</td> <td>Wilhelm</td> <td>Ava</td></tr>
<tr ausrichten="Center"><td>6</td> <td>Ethan</td> <td>Mein</td></tr>
<tr ausrichten="Center"><td>7</td> <td HTML>Michael</td> <td>Emily</td></tr>

Lösung:

Code

result=re.findall(R'<td>w+</td>S<td>(w+)</td>S<td>(w+)</td>',str)
Druckergebnis
Ausgabe:
[('Noah', 'Emma'), ('Liam', 'Olivia'), ('Mason', 'Sophia'), ('Jakob', 'Isabella'), ('Wilhelm', 'Ava'), ('Ethan', 'Mein'), ('Michael', 'Emily')]

Sie können die HTML-Datei mit der urllib2-Bibliothek lesen (siehe Code unten).

Code

urllib2 importieren
Antwort = urllib2.urlopen('')
html = antwort.lesen()

Abschließende Anmerkungen

In diesem Beitrag, wir haben über den regulären Ausdruck diskutiert, die Methoden und Metazeichen, um einen regulären Ausdruck zu bilden. Wir haben auch mehrere Beispiele analysiert, um den praktischen Nutzen davon zu sehen.. Hier habe ich versucht, Ihnen Regex vorzustellen und die gängigsten Methoden zur Lösung von Maximum-Regex-Problemen zu behandeln..

War der Beitrag hilfreich? Teilen Sie uns Ihre Meinung zu diesem Leitfaden im Kommentarbereich unten mit..

Wenn Ihnen das, was Sie gerade gelesen haben, gefällt und Sie weiter über Analytics lernen möchten, abonnieren Sie unsere E-Mails, Folge uns auf Twitter oder wie bei uns Seite auf Facebook.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.