Python für Systemadministratoren Grundkurs

re – reguläre Ausdrücke

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Reguläre Ausdrücke sind das Mittel der Wahl, um die folgenden Fragen zu beantworten. Entspricht ein Text einem Pattern? Existiert ein Pattern in einem Text? Darüber hinaus können Sie jedes Pattern innerhalb eines Textes durch einen anderen Text ersetzen.
08:31

Transkript

In dieser Lektion möchte ich Ihnen die Reguläre Ausdrücke-Bibliothek in Python genauer vorstellen. Die Reguläre Ausdrücke-Biblitohek enthält sehr viele Konstanten, Methoden und Funktionen. Durch "re.IGNORECASE" matched Ihr regulärer Ausdruck case-insensitive. Das heißt, unabhängig von Groß- und Kleinschreibung. "re.findall" gibt Ihnen eine Liste von Strings zurück, die daraus entsteht, wenn Sie Pattern auf String anwenden. "re.finditer" gibt Ihnen keine Liste von Strings, sondern Iterator zurück. Auf allen Substrings, die dem Pattern "pattern" in String entsprechen. "re.match" analysiert den String und gibt Ihnen zurück, ob der String mit den Pattern "pattern" beginnt. "re.search" gibt Ihnen zurück, ob das Pattern in dem String vorkommt. "re.split" splittet einen String, entsprechend dem Pattern "pattern". Sie kriegen also eine Liste von Substrings zurück. "re.sub" substituiert in dem String "string" alle Pattern und ersetzt sie mit "repl". "re.subn" macht das Gleiche, gibt Ihnen aber zusätzlich zurück, wie oft ein String in "string" ersetzt wurde. Genau genommen gibt "re.search" oder "rematch" nicht true oder false zurück, sondern es gibt ein Matchobjekt zurück. Und dieses Matchobjekt können Sie dann weiterverarbeiten, so bekommen Sie z. B. durch "match.group" den Gesamttreffer zurück, durch "match.start" und "match.end" den Anfang und das Ende des Treffers. Und durch "match.span" beides zusammen. Das Übersetzen eines regulären Ausdrucks ist relativ teuer, daher ist es eine gute Idee, den regulären Ausdruck schon vorzukompilieren, wenn Sie ihn häufiger anwenden wollen. Und das können Sie mit "re.compile" machen, und in dem Zuge können Sie "regObj.finditer" direkt auf String anwenden und müssen natürlich nicht mehr das Pattern angeben. Die vielen Konstanten, Methoden und Funktionen, werde ich jetzt noch in der Anwendung zeigen. Und dann lege ich schon mit der Anwendung los. Zuerst benötige ich einen String. Den kopiere ich mir hier rein, und dann importiere ich noch das "re"-Modul. Gut. Als nächstes wende ich "match" an. "match" parst den String von links nach rechts und schaut, ob es diesen regulären Ausdruck "Python" hier entspricht. Der reguläre Ausdruck sagt diesem Fall, dass entweder ein großes oder kleines "P" stehen muss. "y", "t", "h", das "h" optionalisch, und "o","n" folgen muss. Und Sie sehen, der String entspricht dem Pattern, also kriege ich in diesem Fall ein Match-Objekt zurück. Das Match-Objekt evaluiert in einem logischen Ausdruck diesen hier zu true, und damit bekomme ich das Ergebnis "match". Ich werde auf diese if-Abfrage verzichten. Und Sie sehen es hier, wenn ich jetzt ein Match-Objekt zurückbekomme, hier, dann evaluiert dieses Match-Objekt zu true und wenn nicht, Sie sehen es hier, schreibe ich mal was rein, was nicht gut gehen wird, bekomme ich einfach nichts zurück. Also, immer wenn ich ein Match-Objekt zurückbekomme, sehen Sie, dass der Ausdruck zu true evaluiert. Ich kann natürlich auch "match" anwenden auf einem String, "awesome Python", in diesem Fall bekomme ich kein Match-Objekt zurück, weil "match" versucht von links nach rechts den String zu parsen, und der String beginnt hier halt nicht mit "Python", sondern mit "awesome". Wenn Sie was suchen wollen im String, dann verwenden Sie natürlich "search" und nicht "match". In diesem Fall bekommen Sie wieder ein Match-Objekt zurück. Das ist dann natürlich nicht der Fall, wenn, wie hier, der reguläre Ausdruck sagt, er muss mit klein "p" beginnen. Genauso gut können Sie jetzt wieder einen logischen Ausdruck verwenden. Und diesmal sehen Sie, ich sage "not re.search", bekomme ich das Ergebnis zurück, "no search result". Sie können natürlich auch case-insensitive suchen. Also unabhängig von Groß- und Kleinschreibung. Hier bekommen Sie kein Ergebnis. Wenn ich aber das Flag "re.IGNORECASE" angebe, sucht er case-insensitive, und damit ist es egal, ob das Python hier groß oder klein geschrieben ist. Dann komme ich schon zum Match-Objekt. Das Match-Objekt bekommen Sie immer zurück, bis jetzt habe ich es nur noch nicht an eine Variable gebunden. Jetzt binde ich es an die Variable "matchObj", und was kann dieses "matchObj"? Können einfach mal über das Dictionary dieses "matchObj" abfragen. Sie sehen, es kann einiges, "group", "lastgroup", "pos", "regs", "span", "start". Paar dieser Funktionen zeige ich Ihnen jetzt. Zum Beispiel "matchObj start". Das heißt, wo beginnt Ihr Treffer, wo endet er, von wo bis wo geht er, was kann man noch machen? "group", das ist der Treffer. Und hier haben Sie eine Stringrepräsentation des Treffers. Das ist nur ein Objekt, keine Methode. Gut. Sie können natürlich auch mal String substituieren, ersetzen, durch "re.sub". Und hier ersetze ich jetzt, in dem String "pyton Python python", jedes Vorkommen dieses Patterns mit dem Wort "Python". Und Sie sehen, hier steht nur noch "Python Python Python" in dem Rückgabestring drin. Wenn Sie in diesem Fall noch ein "n" verwenden, und statt "sub" "subn" aufrufen, bekommen Sie ein Paar zurück. Das erste Element des Paares kennen Sie bereits, das zweite drückt aus, wie oft was substituiert wurde. Sie können auch mithilfe von regulären Ausdrücken splitten, also einen String splitten. Ich rufe Ihnen noch mal bisschen den String ins Gedächtnis. Hier ist es sehr schön. Dieser String hier. Und dann wähle ich jetzt an: "Zahlen splitten". Dieser Ausdruck steht für mindestens eine Zahl, als regulärer Ausdruck. Und wenn ich das jetzt aufrufe, sehen Sie, ich kriege eine Liste von Strings, und die Strings entstehen dadurch, dass ich den ursprünglichen String an Zahlen gesplittert hab'. Sie können es natürlich auch verwenden, um ein Leerzeichen zu splitten. Sie sehen jetzt das hier. Ich lösche ein Leerzeichen. Davor rate ich aber ab, weil reguläre Ausdrücke-Operationen sind relativ teuer. Und wenn Sie das jetzt sozusagen einfacher, direkt mit dem Interface eines Strings machen können, Sie wissen ja, "histPython" ist ein String, und auf dem können Sie direkt "split" aufrufen. Und wenn Sie das so machen, ist das deutlich schneller und einfacher. Daher ist es oft durchaus sinnvoll, die Stringfunktionalität zu verwenden und nicht ein "Regex" aufzurufen. Gut, dann kommen wir schon zu "findall". Jetzt will ich alle Zahlen aus meinem String "hystPython" extrahieren. Und Sie sehen es, das sind alle Zahlen. Als Ergebnis kriege ich eine Liste von Zahlen zurück, Die Zahlen sind natürlich in diesem Fall Strings. Wenn Sie dahingegen "finditer" aufrufen, - hier unten haben wir es im Fokus - "finditer" aufrufen, kriegen Sie keine Liste zurück, sondern Iterator. Das heißt, um tatsächlich Ergebnisse zu bekommen, müssen Sie einen Iterator verwenden und die Einzelwerte abfragen, wie ich es hier tue. Nun sehen Sie das. Hier gebe ich als Erstes raus, "span", von wo bis wo ist der Treffer und hier tatsächlich der Treffer. (7 , 8) bedeutet, sieben ist inklusiv, acht ist exklusiv. Dann komm ich noch zum Kompilieren eines regulären Ausdrucks. Das sehen Sie hier. Hier habe ich einen regulären Ausdruck. Den bekannten Python regulären Ausdruck, den kompiliere ich. Das sehen Sie. Ich habe hier ein Objekt, das den regulären Ausdruck repräsentiert, und jetzt kann ich direkt diesen regulären Ausdruck "p.match" auf z. B. Python anwenden. Und ich kriege zurück: Der reguläre Ausdruck matched. In dieser Lektion habe ich Ihnen die Reguläre Ausdrücke-Bibliothek in Python genauer vorgestellt.

Python für Systemadministratoren Grundkurs

Lernen Sie die zahlreichen Funktionen der Kernsprache und die wichtisgten Bibliotheken für den Administrationsalltag kennen.

1 Std. 53 min (22 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:10.03.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!