Ich möchte dotall und nicht-gierig zusammenbringen. Das ist was ich habe:
%Vor%Dies ist jedoch nicht nicht gierig. Diese Daten stimmen nicht wie erwartet überein:
%Vor%und ich kann nicht verstehen warum.
Was ich in der obigen Regel sage, ist:
Beginne mit "img", dann erlaube 0 oder mehr irgendein Zeichen einschließlich neuer Zeile, dann suche nach mindestens 1 "onmouseover", dann erlaube 0 oder mehr irgendein Zeichen einschließlich neuer Zeile, dann ein "a"
Warum funktioniert das nicht wie erwartet?
Hauptpunkt: dotall muss aktiviert sein
Es ist nicht gierig. Es ist dein Verständnis von nicht gierig, das ist nicht korrekt.
Ein Regex wird immer versuchen, eine Übereinstimmung zu finden.
Lassen Sie mich ein vereinfachtes Beispiel dessen zeigen, was nicht gierig ist (wie von einem Kommentar vorgeschlagen):
%Vor%Dies wird übereinstimmen:
also ist die einzige Übereinstimmung 'aab'
.
Und nur zum Schluss:
Verwenden Sie Regex nicht, um HTML zu analysieren. Es gibt Bibliotheken, die für den Job gemacht wurden. re
gehört nicht dazu.
Zunächst einmal sieht deine Regex ein wenig unkonventionell aus: Du sagst "img", dann eine beliebige Anzahl von Zeichen, "onmouseover" mindestens einmal, aber möglicherweise wiederholt (z. B. "aufMouseovermouseovermouseover"), gefolgt von einer beliebigen Zahl von Zeichen, gefolgt von "a".
Dies sollte von img src="icon_
bis hin zu onmouseover="Cha
passen. Das ist wahrscheinlich nicht das, was du willst, aber es ist das, wonach du gefragt hast.
Zweitens, und das ist viel wichtiger:
Und falls Sie es beim ersten Mal nicht verstanden haben, lassen Sie es mich in Kursivschrift wiederholen:
Schließe mich abschließend dem kanonischen Grimoire zu diesem Thema zu:
Tags und Links python regex non-greedy