[解決済み] Pythonのre.compileは使う価値があるのか?
2022-03-17 05:55:57
質問
Pythonの正規表現にコンパイルを使用するメリットはありますか?
h = re.compile('hello')
h.match('hello world')
対
re.match('hello', 'hello world')
解決方法は?
私は、コンパイルした正規表現を何千回も実行するのと、オンザフライでコンパイルするのを何度も経験しましたが、目に見える違いは感じられませんでした。 もちろん、これは逸話的なものであり、大きな議論にはなりません。 反対 しかし、その差はごくわずかであることがわかりました。
EDIT
実際のPython 2.5ライブラリのコードをざっと見たところ、Pythonはとにかく正規表現を使うときはいつでも内部でコンパイルしてキャッシュしていることがわかりました(例えば
re.match()
つまり、キャッシュのチェックにかかる時間 (内部の
dict
型)を使用します。
モジュールre.pyより(コメントは私です)。
def match(pattern, string, flags=0):
return _compile(pattern, flags).match(string)
def _compile(*key):
# Does cache check at top of function
cachekey = (type(key[0]),) + key
p = _cache.get(cachekey)
if p is not None: return p
# ...
# Does actual compilation on cache miss
# ...
# Caches compiled regex
if len(_cache) >= _MAXCACHE:
_cache.clear()
_cache[cachekey] = p
return p
私は今でもよく正規表現をプリコンパイルしますが、それは再利用可能な素敵な名前にバインドするためだけで、パフォーマンスの向上を期待しているわけではありません。
関連
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】forループを使った辞書の反復処理
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
PicgoのイメージベッドツールをPythonで実装する
-
Pythonの@decoratorsについてまとめてみました。
-
Python Pillow Image.save jpg画像圧縮問題
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み] Python string.replace正規表現 [重複]について
-
[解決済み] pandasのforループは本当にダメなのか?どのような場合に気をつけるべきですか?