1

Reguläre Ausdrücke werden normalerweise als Zeichenfolgen ausgedrückt, sie haben jedoch auch Eigenschaften (dh eine Zeile, mehrere Zeilen, Groß-/Kleinschreibung ignorieren). Wie würden Sie sie speichern? Und für kompilierte reguläre Ausdrücke, wie man es speichert?Wie speichern Sie reguläre Ausdrücke im Google App Engine-Datenspeicher?

Bitte beachten Sie, dass wir benutzerdefinierte Eigenschaft Klassen schreiben: http://googleappengine.blogspot.com/2009/07/writing-custom-property-classes.html

Wie ich Python verstehe nicht genug, mein erster Versuch eine benutzerdefinierte Eigenschaft zu schreiben, die eine kompilierte reguläre Ausdrücke speichert fehlgeschlagen.

+0

Könnten Sie klarstellen, was Sie eigentlich erreichen möchten? – si28719e

Antwort

2

Sie können den Text entweder wie oben vorgeschlagen speichern, oder Sie können den kompilierten RE in Essig einlegen und entfernen. Siehe zum Beispiel PickledProperty auf dem Kochbuch.

Aufgrund der (fehlenden) Geschwindigkeit von Pickle, insbesondere bei App Engine, bei der cPickle nicht verfügbar ist, werden Sie wahrscheinlich feststellen, dass das Speichern des Textes der Regex die schnellere Option ist. In der Tat scheint es, dass wenn er gebeizt wird, der ursprüngliche Text einfach gespeichert wird.

3

Ich bin nicht sicher, ob Python supprts, aber in .net regex, können Sie diese Optionen innerhalb der Regex selbst angeben:

(?si)^a.*z$ 

würde einzeilige angeben, Fall ignorieren.

Tatsächlich beschreiben die Python-Dokumentation einen solchen Mechanismus hier: http://docs.python.org/library/re.html

Zur Erinnerung: (cut and paste von Link oben)

(iLmsux?)

(One oder mehr Buchstaben aus der Menge 'i', 'L', 'm', 's', 'u', 'x'.) Die Gruppe stimmt mit der leeren Zeichenfolge überein. Die Buchstaben setzen die entsprechenden Flags: re.I (ignore case), re.L (locale-abhängig), re.M (mehrzeilig), re.S (dot entspricht allen), re.U (Unicode-abhängig) und re.X (verbose), für den gesamten regulären Ausdruck. (Die Flags werden in Modulinhalt beschrieben.) Dies ist nützlich, wenn Sie die Flags als Teil des regulären Ausdrucks einschließen möchten, anstatt ein Flag-Argument an die compile() - Funktion zu übergeben.

Beachten Sie, dass das Flag (? X) ändert, wie der Ausdruck analysiert wird. Es sollte zuerst in der Ausdruckszeichenfolge oder nach einem oder mehreren Leerzeichen verwendet werden. Wenn vor dem Flag Leerzeichen vorhanden sind, sind die Ergebnisse nicht definiert.

3

Ich würde nicht versuchen, die kompilierte Regex zu speichern. Die Daten in einer kompilierten Regex sind nicht zum Speichern gedacht und es ist nicht garantiert, dass sie einfügbar oder serialisierbar sind. Speichern Sie einfach die Zeichenfolge und kompilieren Sie sie erneut (das Modul wird dies hinter den Kulissen tun).