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;
同じパターンを使いまわす場合は、 コンパイルした方が高速なのでおすすめです。