1

正則表達式通常表示爲字符串,但它們也具有屬性(即單行,多行,忽略大小寫)。你將如何存儲它們?對於編譯的正則表達式,如何存儲它?如何在Google App Engine數據存儲中存儲正則表達式?

請注意,我們可以編寫自定義屬性類:http://googleappengine.blogspot.com/2009/07/writing-custom-property-classes.html

正如我不明白的Python不夠,我第一次嘗試寫存儲編譯的正則表達式失敗的自定義屬性。

+0

你能澄清你實際上想要達到的目標嗎? – si28719e 2009-08-09 03:00:14

回答

2

您可以按照上面的建議存儲文本,也可以醃製和取消編譯的RE。例如,請參閱食譜上的PickledProperty

由於Pickle的速度(缺乏),尤其是在App Engine中cPickle不可用的情況下,您可能會發現存儲正則表達式的文本是更快的選項。實際上,在醃製時,反正只是簡單地存儲原始文本。

3

我不知道如果Python的supprts,但在.NET正則表達式,你可以指定正則表達式本身中的這些選項:

(?si)^a.*z$ 

將指定單行,忽略大小寫。

事實上,Python文檔在這裏描述的這樣一種機制:http://docs.python.org/library/re.html

總結一下:(cut'n'paste從上面的鏈接)

(iLmsux?)

(一或者來自集合'i','L','m','s','u','x'的更多字母。)組匹配空字符串;這些字母設置了相應的標誌:re.I(忽略大小寫),re.L(依賴於語言環境),re.M(多行),re.S(點全匹配),re.U(依賴於Unicode)和re.X(詳細),用於整個正則表達式。 (這些標誌在模塊內容中有描述。)如果您希望將標誌作爲正則表達式的一部分包含在內,而不是將標誌參數傳遞給compile()函數,這非常有用。

請注意,(?x)標誌更改了表達式的解析方式。它應該首先在表達式字符串中使用,或者在一個或多個空白字符之後使用。如果在標誌之前有非空白字符,結果是未定義的。

3

我不會嘗試存儲編譯的正則表達式。編譯後的正則表達式中的數據不能被存儲,並且不能保證是可挑選的或可序列化的。只需存儲該字符串並重新編譯(無論如何,re模塊將爲您在幕後執行此操作)。

相關問題