パターンから正規表現オブジェクトを作成する(Pattern)

正規表現を使ってどのような文字列とマッチさせるのかを定義したものがパターンです。ここでは文字列としてパターンを定義したあと、パターンから正規表現オブジェクト(Pattern クラスのインスタンス)を取得する方法について解説します。

(Last modified: )

パターンを定義する

最初にパターンを文字列として定義します。例えば対象の文章の中に abc という文字列が含まれるかどうかを調べる場合のパターンは 'abc' になります。

pat = 'abc'

また正規表現ではメタ文字と呼ばれる特別な意味を持つ文字を使用してパターンを定義することができます。例えば対象の文字列の末尾が png で終わっているかどうか調べる場合のパターンは 'png$' となります。この '$' は文字列の末尾にマッチするメタ文字です。

pat = 'png$'

パターンを定義するときに使用するメタ文字の中にはバックスラッシュ '\' を使用するものがあります。例えば英数字とアンダーバーを表す '\w' などです。パターンを文字列として記述する場合、文字列の中でバックスラッシュは特別な意味をもつため次のようにエスケープを行う必要があります。

pat = '\\w'

そこでパターンを定義する場合、通常の文字列ではなく raw 文字列を使用すると便利です。 raw 文字列ではバックスラッシュはエスケープせずに記述することができるため、先ほどのパターンは次のように記述することができます。

pat = r'\w'

※ raw 文字列については「raw文字列の利用」を参照されてください。

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

Python で正規表現を利用する場合、パターンとして定義した文字列をそのまま利用して re モジュールに含まれる関数を使う方法と、パターンをいったんコンパイルして Pattern クラスのインスタンスを作成したあと、 Pattern クラスのメソッドを使う方法があります。

パターンを一度しか使用しない場合はコンパイルしなくても構いませんが、同じパターンを繰り返し使用する場合にはコンパイルしておく方がパフォーマンスがよくなります。今後は基本的にコンパイルしてから利用する方法で解説していきます。

パターンをコンパイルして Pattern クラスのインスタンスを生成するには re モジュールに含まれる compile 関数を使います。

re.compile(pat, flags=0)

1 番目の引数にはパターンを表す文字列を指定します。 2 番目の省略可能な引数にはフラグを指定します。フラグについては別のページで解説します。

具体的には次のように記述します。

import re

pattern = re.compile(r'png$')

Pattern クラスのインスタンスを取得したら、 Pattern で用意されているメソッドを使って対象の文章とパターンがマッチしているかどうかを調べることができます。

サンプルコード

次のサンプルを見てください。

import re

filename = 'apple.png'
pattern = re.compile(r'png$')

result = pattern.search(filename)
if result :
    print('パターンにマッチします')
else :
    print('パターンにマッチしません')

>> パターンにマッチします

対象の文字列がパターンにマッチするかどうかを調べて表示しました。

-- --

文字列としてパターンを定義し、コンパイルして Pattern クラスのオブジェクトを取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。