私の質問は
正規表現パターンの解析中にジャストインタイムのコンパイルを行い、テキストの照合/置換時に使用する正規表現エンジンはありますか? または、i386 または x64 アーキテクチャーの JIT はどこで学べますか?
必要な理由
私は最近、約 10MB のデータを持つ通常の C コードと比較して、Python の組み込み正規表現エンジンをベンチマークしようとしていました。
単純な置換 (たとえば ) の場合、比較的高速であることがわかりましたab
。Czzz
よりも 2 倍から 3 倍遅いだけです。
ただし、[a-z]c
C の 5 ~ 8 倍の時間がかかりました。
また、グループ化 (たとえば([a-z])(c)
to AA\2\1BB
) を使用すると、C の 20 倍から 40 倍の時間がかかりました。
まだジャストインタイムのコンパイルではありませんが、ジャストインタイムのコンパイルができれば、もっと高速になると思います。
PS: パターンをコンパイルする際に正規表現パターンごとにプロファイリングを使用しab
ます。 .[a-z]c
([a-z])(c)
更新 1
psyco で試してみましたが、速度はそれほど向上しません。何度もループするのではなく、ビッグデータに対してテキストの置き換えを行っているためかもしれません。
私が間違っていなければ、Pythonre.sub
はすでにネイティブで実行していると思うので、pyscoはそれほど速度を向上させることはできません.
更新 2
Python にラップされたブースト正規表現を試してみましたが、Python の正規表現よりもさらに遅いため、ボトルネックは Python の文字列処理にあるようで、Jan Goyvaerts も回答でそれを指摘しています。
アップデート
ab[a-z]c
次の同等の C コード ( *s
10MB の長いテキストを指す)のように、正規表現パターンをマシン コードに変換したいと思います。
do{
if(*s=='a' && s[1]=='b' && s[2]>='a' && s[2]<='z' && s[3]=='c') return 1;
}while(*s++);
return 0;
何か案は?