Frage

Regelmäßige Ausdrücke werden normalerweise als Saiten ausgedrückt, aber auch Eigenschaften (dh Einzellinie, Multi -Linie, ignorieren Sie den Fall). Wie würden Sie sie aufbewahren? Und wie man für kompilierte reguläre Ausdrücke es speichert?

Bitte beachten Sie, dass wir benutzerdefinierte Eigenschaftsklassen schreiben können: http://googleabengine.blogspot.com/2009/07/writing-custom-property-classes.html

Da ich Python nicht genug verstehe, versuche mein erster Versuch, eine benutzerdefinierte Eigenschaft zu schreiben, die einen kompilierten regulären Ausdruck speichert, fehlgeschlagen.

War es hilfreich?

Lösung

Sie können den Text entweder wie vorgeschlagen speichern, oder Sie können den kompilierten Re -RE einweihen und auspicken. Zum Beispiel siehe EingelegterProperty Auf dem Kochbuch.

Aufgrund der (mangelnden) Geschwindigkeit der Gurke, insbesondere bei App -Engine, in der CPICKLE nicht verfügbar ist, ist es wahrscheinlich, dass das Speichern des Textes des Regex die schnellere Option ist. In der Tat scheint es, dass ein RE beim Einlegen den Originaltext sowieso einfach speichert.

Andere Tipps

Ich bin mir nicht sicher, ob Python es untermauert, aber in .NET Regex können Sie diese Optionen innerhalb des Regex selbst angeben:

(?si)^a.*z$

Würde Einzelzeile festlegen, den Fall ignorieren.

In der Tat beschreiben die Python -Dokumente hier einen solchen Mechanismus: http://docs.python.org/library/re.html

Zusammenfassung: (Cut'n'Paste aus dem Link oben)

(? Ilmsux)

(Ein oder mehrere Buchstaben aus dem Set 'i', 'l', 'm', 's', 'u', 'x'.) Die Gruppe entspricht der leeren Zeichenfolge; Die Buchstaben setzen die entsprechenden Flags: Re.i (ignorieren Sie den Fall), Re.l (Lokalschema abhängig), Re.m (Multi-Line), RE.S (DOT übereinstimmen alle), RE.U (unicode abhängig) und Re.x (ausführlich) für den gesamten regulären Ausdruck. (Die Flags werden in den Modulinhalten beschrieben.) Dies ist nützlich, wenn Sie die Flags als Teil des regulären Ausdrucks einbeziehen möchten, anstatt ein Flag -Argument an die Funktion compile () zu übergeben.

Beachten Sie, dass das Flag (? X) die Art und Weise ändert, wie der Ausdruck analysiert wird. Es sollte zuerst in der Ausdruckszeichenfolge oder nach einer oder mehreren Whitespace -Zeichen verwendet werden. Wenn vor der Flagge nicht-Whitespace-Zeichen vorhanden sind, sind die Ergebnisse undefiniert.

Ich würde nicht versuchen, die kompilierte Regex zu speichern. Die Daten in einem zusammengestellten Regex sind nicht für die gespeicherte und garantiert garantiert garantiert aussagbar oder serialisierbar. Speichern Sie einfach die Zeichenfolge und kompilieren Sie es (das RE-Modul wird dies sowieso hinter den Kulissen für Sie tun).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top