Benutzer-Werkzeuge

Webseiten-Werkzeuge


python_2

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
python_2 [2018/04/26 13:10]
root [Regular Expressions]
python_2 [2018/04/26 16:43] (aktuell)
root [Regular Expressions]
Zeile 365: Zeile 365:
   * Bibliothek ist re   * Bibliothek ist re
  
-**Hinweis:** By Default arbeitet das Matching "Greedy", das heißt es wird einen String so lang wie durch das Regular-Expression erlaubt matchen: "Subject: Petersen meint: Muss schneller gehen" - Regex: "*+:" - Das Ergebniss in diesem Fall ist nicht "Subject:" wie man meinen könnte, sondern "Subject:  Petersen meint:", da nach irgendwelchen Zeichen (*) und einem Doppelpunkt gesucht wird -> der Doppelpunkt am meisten Rechts ist der nach "meint".+**Hinweis:** By Default arbeitet das Matching "Greedy", das heißt es wird einen String so lang wie durch das Regular-Expression erlaubt matchen: "Subject: Petersen meint: Muss schneller gehen" - Regex: "*+:" - Das Ergebniss in diesem Fall ist nicht "Subject:" wie man meinen könnte, sondern "Subject:  Petersen meint:", da nach irgendwelchen Zeichen (*) und einem Doppelpunkt gesucht wird -> der Doppelpunkt am meisten Rechts ist der nach "meint"\\ Man kann das Abschalten in dem man "?" an das Ende Regular-Expression-Kombination schreibt: "*+?:", das würde dann zwei Elemente (statt einem) ausgeben: "Subject:", "Petersen meint:" ausgeben. 
 + 
 +Special-Charakters, nicht komplette Liste 
 +^Character ^Erklärung ^ 
 +|.|Steht für beliebige Zeichen| 
 +|*|Bedeutet das vorhergehende Zeichen 0 mal oder beliebig oft - das vorhergehende Zeichen kann also gar nicht oder beliebig oft nacheinander auftauchen. \\ \\ Häufig genutzt in der Kombination: .* \\Beliebiges Zeichen, beliebig oft | 
 +|+|Das vorhergehende Zeichen mindestens einmal, maximal beliebig oft.| 
 +|?|Abschalten der Greedy-Funktion für das davor stehende Zeichen/Zeichenkombination, d.h. Abschalten des Verhaltens den regulären Ausdruck auf ein möglichst großes Gebiet anzuwenden. \\ Beschränkt den regulären Ausdruck auf den kleinsten Teil einer Teilzeichenkette der dem regulären Ausdruck passt, anstatt einen möglichst großen Teil einer Zeichenkette zu finden auf den der reguläre Ausdruck noch anwendbar ist (siehe Abschnitt oben)| 
 +|\S|Ein Zeichen was kein Leerzeichen ist - oder anders alles was kein Leerzeichen ist| 
 +|[ ]|Steht für eine frei definierbare Gruppe von Zeichen. \\ \\ Grundsätzlich (ohne extra Zeichen dahinter) steht es für genau ein Zeichen aus dieser Gruppe. In Zusammenhang mit +, * usw. erhält es die Bedeutung als wäre es ein normales Zeichen gefolgt von dem Spezialzeichen, das heißt irgend ein Zeichen der Gruppe kann ggf. mehrfach hintereinander auftreten, es muss sich dabei aber nicht um das gleiche Zeichen handeln, es müssen nur Zeichen der Gruppe sein -> also ist die Gruppe a,b,c, dann könnte es aabca sein. \\ \\ <WRAP> 
 +Gruppendefinition: 
 +  * [A-Z] - der "-" Operator definiert einen Bereich (inklusive dem ersten und letzten angegeben Zeichen) von Zeichen 
 +  * [ACG] - definiert eine Liste von Zeichen  
 + 
 +Die beiden Vorgehensweisen können gemischt werden: 
 +  * [A-Da-dF] - matched Zeichen A-D und a-d und F 
 + 
 +**Hinweis:** Die Angaben sind Case-Sensitiv, Groß- und Kleinschreibung haben also Bedeutung   
 +</WRAP>
 +|[^ ]|Matcht alles außer die Zeichen die in der eckigen Klammer definiert sind - ist eine Umkehr|
  
 ^Funktion ^Beschreibung ^ ^Funktion ^Beschreibung ^
Zeile 375: Zeile 394:
 </code> </code>
 Oben stehendes Beispiel würde ein Objekt zurück geben, würde es nicht matchen würde es None zurück geben. Oben stehendes Beispiel würde ein Objekt zurück geben, würde es nicht matchen würde es None zurück geben.
-</WRAP>|+</WRAP> |\\ \\
 |re.findall|Liefert eine Liste mit Strings zurück auf die der regluläre Ausdruck zutraf. \\ <WRAP> |re.findall|Liefert eine Liste mit Strings zurück auf die der regluläre Ausdruck zutraf. \\ <WRAP>
 <code> <code>
Zeile 382: Zeile 401:
 </code> </code>
 Das Ergebnis ist eine Liste mit 2 Elementen mit jeweils "ll" in diesen. Das Ergebnis ist eine Liste mit 2 Elementen mit jeweils "ll" in diesen.
-</WRAP> | 
  
 +**Beschränken des Rückgabe-Bereichs**
 +\\
 +Es kann sein, dass man zwar auf einen bestimmten Bereich matchen will, aber nur einen Teilstring extrahieren (der nicht identisch ist mit dem Gesamtstring auf den man matcht).
 +\\
 +Dazu kann man einen Teilausdruck in Klammern definieren, es wird dann zwar auf den gesamten regulären Ausdruck gematcht, aber nur das das Ergebnis des Ausdrucks in Klammern wird in den Ergebnissen berücksichtigt. \\
 +<code>
 +import re
 +a="From: Peter.Deichsel@something.de"
 +re.findall("^\W*From:\W*(\S+)",a)
 +</code>
 +In obigem Beispiel ist die E-Mailadresse im From von Interesse. \\
 +  * ^\W*From:\W* -> stellt sicher das der From-Header gefunden wird, es können davor und dahinter Leerzeichen sein (\W*)
 +  * \S+ -> stellt sicher das nach dem Header mindestens ein Zeichen kommt was kein Leerzeichen ist
 +  * () -> bedeutet das nur das Ergebnis des reguläre Ausdruck innerhalb der Klammern zurückgeliefert wird
 +
 +In obigem Beispiel würde "Peter.Deichsel@something.de" als Ergebnis zurückgeliefert.
 +</WRAP> |
python_2.1524741047.txt.gz · Zuletzt geändert: 2018/04/26 13:10 von root