1

通常、正規表現は文字列として表現されますが、プロパティもあります (つまり、単一行、複数行、大文字と小文字を区別しない)。それらをどのように保管しますか?コンパイルされた正規表現の場合、それを保存する方法は?

カスタム プロパティ クラスを記述できることに注意してください: http://googleappengine.blogspot.com/2009/07/writing-custom-property-classes.html

私は Python を十分に理解していないため、コンパイルされた正規表現を格納するカスタム プロパティを最初に記述しようとして失敗しました。

4

3 に答える 3

3

Python がサポートしているかどうかはわかりませんが、.net 正規表現では、正規表現自体でこれらのオプションを指定できます。

(?si)^a.*z$

単一行を指定し、大文字と小文字を区別しません。

実際、Python ドキュメントでは、このようなメカニズムについて説明しています: http://docs.python.org/library/re.html

要約するには:(上記のリンクからカットアンドペースト)

(?iLmsux)

(セット 'i'、'L'、'm'、's'、'u'、'x' からの 1 つまたは複数の文字。) グループは空の文字列に一致します。文字は、対応するフラグを設定します: re.I (大文字と小文字を区別しない)、re.L (ロケール依存)、re.M (複数行)、re.S (ドットはすべてに一致)、re.U (Unicode 依存)、およびre.X (詳細)、正規表現全体。(フラグについては、モジュールの内容で説明しています。)これは、フラグ引数を compile() 関数に渡す代わりに、正規表現の一部としてフラグを含めたい場合に便利です。

(?x) フラグは式の解析方法を変更することに注意してください。式文字列の最初か、1 つ以上の空白文字の後に使用する必要があります。フラグの前に空白以外の文字がある場合、結果は未定義です。

于 2009-08-09T01:26:54.797 に答える
3

コンパイルされた正規表現を保存しようとはしません。コンパイルされた正規表現のデータは保存するように設計されておらず、ピクル可能またはシリアライズ可能であることが保証されていません。文字列を保存して再コンパイルするだけです (いずれにせよ、re モジュールが舞台裏でこれを行います)。

于 2009-08-09T01:52:14.797 に答える
2

上記のようにテキストを保存するか、コンパイルされた RE を pickle して unpickle することができます。たとえば、クックブックのPickledPropertyを参照してください。

特に cPickle が利用できない App Engine では、Pickle の速度が (遅い) ため、正規表現のテキストを保存する方が高速なオプションであることがわかるでしょう。実際、ピクルされると、re はとにかく元のテキストを単純に保存するように見えます。

于 2009-08-09T13:26:06.233 に答える