Google App Engine Datastoreに正規表現を保存する方法は?
-
12-09-2019 - |
質問
通常、正規表現は文字列として表されますが、プロパティもあります(つまり、シングルライン、マルチライン、ケースを無視します)。どのように保管しますか?コンパイルされた正規表現のために、それを保存する方法は?
カスタムプロパティクラスを書くことができることに注意してください: http://googleappengine.blogspot.com/2009/07/writing-custom-poperty-classes.html
私はPythonを十分に理解していないので、私が最初にコンパイルされた正規表現を保存するカスタムプロパティを書き込もうとします。
解決
上記のように、テキストを保存するか、コンパイルされたREを漬け込んで取り除くことができます。たとえば、参照してください PickledProperty 料理本で。
ピクルスの速度が不足しているため、特にCpickleが利用できないアプリエンジンでは、おそらくRegexのテキストを保存することがより速いオプションであることがわかります。実際、ピクルスすると、とにかく元のテキストをREが保存するように見えます。
他のヒント
Pythonがそれをサポートするかどうかはわかりませんが、.NET Regexでは、Regex自体の中でこれらのオプションを指定できます。
(?si)^a.*z$
シングルラインを指定し、ケースを無視します。
実際、Pythonドキュメントはこうしたメカニズムをここで説明しています。 http://docs.python.org/library/re.html
要約するには:(上記のリンクからcut'n'paste)
(?ilmsux)
(セット「I」、「L」、「M」、「S」、「u」、「u」からの1つ以上の文字。グループは空の文字列と一致します。文字は、対応するフラグを設定します:Re.i(ケースを無視)、Re.l(ロケール依存)、Re.m(マルチライン)、Re.s(dotマッチングすべて)、Re.u(Unicode依存)、およびre.x(verbose)、正規表現全体について。 (フラグはモジュールの内容で説明されています。)これは、flag引数をコンパイル()関数に渡す代わりに、正規表現の一部としてフラグを含める場合に役立ちます。
(?x)フラグは、式の解析方法を変更することに注意してください。最初に式文字列で、または1つ以上の白文字の文字の後に使用する必要があります。フラグの前に非白文字の文字がある場合、結果は未定義です。
コンパイルされたRegexを保管しようとはしません。コンパイルされたREGEXのデータは、保存されるように設計されておらず、選択可能またはシリアル化可能であることが保証されていません。文字列を保存して再コンパイルするだけです(REモジュールは、とにかく舞台裏でこれを行います)。