Python: Suchen und Ersetzen mit "regular expressions"von Kai Surendorf Hyperlinks mit Python automatisch zu setzen, ist nicht so einfach. Mit den so genannten "regular expressions" kommt man doch zum Ziel. Nehmen wir an, Sie wollten in einem Text, der eine URL enthält, diese automatisch verlinken. In Gästebücher und Diskussionsforen ist dies ein recht praktisches Mittel, um dem Besucher unnötige Tipp-Arbeit zu ersparen. Mit einer einfachen Suchen- und Ersetzen-Funktion kommt man der Lösung der Aufgabe schon recht nahe, aber es ist noch einiges mehr notwendig. Ein Beispiel
In dem Skript, in dem diese Funktion verwendet wird, muss natürlich zuerst das Modul für die regular expressions importiert werden, was mit der zweiten Zeile geschieht. Ab der dritten Zeile wird eine umfangreiche String-Variable definiert. Die drei Anführungszeichen signalisieren dem Python-Interpreter, dass alles, was nun folgt, als Text behandelt werden muss. Das Fehler trächtige "Escapen" von Sonderzeichen kann man sich hierbei gegebenenfalls ersparen. Mit drei weiteren Anführungszeichen wird diese Variablen-Definition beendet. Nun wird die Funktion "verlinken" definiert, die den übergebenen Ausgangstext in der Variable "text" vorhält. Da Python die Ihnen vielleicht von anderen Programmiersprachen bekannten "do_loop"-Schleifen nicht verwendet, muss man sich anders behelfen. Mit "while 1:" wird der Python-Interpreter angewiesen, das Nachfolgende so lange auszuführen, bis diese Schleife beendet wird. Es handelt sich also um eine Endlosschleife. Mit "re.search", einer Funktion des Moduls für regular expressions, wird gezielt nach der ersten URL gesucht. In den Klammern wird hierbei definiert, wonach in welcher Variable gesucht werden soll. Die Variable ist natürlich "text". Es soll zunächst nach einem regulären Ausdruck gesucht werden, mit dem die URL herausgefunden wird. Das \s entspricht einem Leerzeichen vor und nach der URL. Der Text zwischen http:// und dem abschließenden Leerzeichen soll beliebig sein, was mit .*? ausgedrückt wird. Wurde nichts mehr gefunden, bedeutet dies, dass inzwischen alle Links erstellt wurden oder es nichts mehr zum Verlinken gab. In diesem Fall ist der Ort der Fundstelle "None" und die Schleife wird mit "break" beendet. Die Variable "ort" enthält allerdings nicht die vollständige URL, nach der gesucht wurde, sondern ein so genanntes "MatchObject". Unter "ort" versteht man vielmehr eine Ortsangabe, die Anfang und Ende der Fundstelle bezeichnet. Jetzt lässt sich mit ort.group() der eigentliche Wert (also die gefundene URL!), der Variable zu_ersetzen zuweisen. Die überflüssigen Leerzeichen werden in der nächsten Zeile eliminiert. Ist man der URL endlich habhaft geworden, kann der HTML-Code erstellt werden. Die Variable "code" soll diesen Quellcode enthalten. Gehen Sie so vor: Zunächst wird ein Grundgerüst definiert. An der Stelle, an der die eigentliche URL stehen soll, sorgt die Bezeichnung %(url)s dafür, dass der Wert der Variable url eingefügt wird. Die nachfolgende Anweisung %vars () verweist dabei auf den allgemeinen Variablen-Speicher, in dem sich die Variable "url" bereits befindet. Abschließend wird im Ausgangstext die ursprüngliche URL durch den fertigen Link ersetzt. Sind alle URLs verlinkt, gibt die Funktion den Wert der Variable "text" mittels "return text" zurück. Der Wert lässt sich nun mit der letzten Zeile ausgeben oder bei Bedarf weiterverarbeiten. So viele unterschiedliche Variablen sind - das müssen wir zugeben - eine echte Herausforderung. Lassen Sie sich die Freude an regulären Ausdrücken aber bitte nicht verderben, schließlich gehören Ausdauer und Bastelfreude zu den Kardinaltugenden eines jeden Programmierers! Auch ein Blick in die Dokumentation der Python-Bibliotheken hilft weiter, dort ist eine Beschreibung des Moduls "re" enthalten.
|
| ||||||
|
|
Partner: Template OK - PCopen - SITEopen - PCopen Schweiz - HTMLopen Schweiz - VirtualUniversity.ch - WEB-SET.com - YesMMS - Job und Karriere |