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模块将为您在幕后执行此操作)。

相关问题