Python: 正規表現のパターンをコンパイルする compile()

パターンをコンパイルする compile()

Pythonでは正規表現のパターンを何度も使いまわす場合、 compile()関数であらかじめパターンをコンパイルしておくことができます。

コンパイルしておくことで、正規表現での検索が高速に実行されます。

書式
compile(パターン, flags=0)

戻り値はregexオブジェクトです。「コンパイル済み正規表現オブジェクト」とも言います。

regexオブジェクトのメソッドとして、 search()、match()、findall()、finditer()、sub()、split()などがあります。
例えばregexオブジェクトのsearch()メソッドは、 モジュールレベルのsearch()関数と同じ働きをします。 その他のメソッドも同じです

ではパターンをコンパイルしない場合と、 コンパイルする場合のコードを記述して、違いを見てみます。

パターンをコンパイルしない場合

下はモジュールレベルの search()関数を使ったコードです。 b タグのテキスト部分を取得しています。

import re

p = "<b>(.+)</b>"
s = "<div><b>hello</b></div>"

# search()関数
m = re.search(p, s)

print(m.group(1)) # hello;

パターンをコンパイルする場合

下のコードでは、 まずパターンをコンパイルしてregexオブジェクトを取得しています。 次にregexオブジェクトのsearch()メソッドでマッチングしています。

p = "<b>(.+)</b>"
s = "<div><b>hello</b></div>"

# コンパイル
reg = re.compile(p)

# search()メソッド
m = reg.search(s)

print(m.group(1)) # hello;

同じパターンを使いまわす場合は、 コンパイルした方が高速なのでおすすめです。

Python