Pythonの正規表現

Python で正規表現を利用する場合の記述方法です。正規表現オブジェクトの作成方法、メソッドを使ってマッチした文字列を取得したり置換を行う方法、そして Python で利用可能なオプション(フラグ)について解説します。

※ Python を使った正規表現の詳細な使い方については「Python入門」の中の「Python正規表現」を参照されてください。

(Last modified: )

正規表現オブジェクトの作成

Python ではパターンを文字列として定義します。文字列は通常の文字列でも構いませんが、パターンの中にバックスラッシュ( \ )が含まれている場合はエスケープを行って( \\ )と記述する必要があります。その為、パターンを定義するときにはバックスラッシュをエスケープする必要がない raw 文字列を使うと便利です。

p = 'パターン'
p = r'パターン'  // raw文字列

パターンを文字列として定義したら、 re モジュールに含まれる関数を使って対象の文字列とパターンがマッチしているか調べたり置換を行ったりすることができます。また何度も同じパターンを使用する場合は、パターンをコンパイルして正規表現オブジェクトを作成し、 Pattern クラスのメソッドを使って対象の文字列とパターンがマッチしているか調べたり置換を行ったりすることができます。

具合的には次のように記述します。文字列のまま正規表現を利用する場合は次のようになります。

import re

result = re.search(r'apple', 'I like apple')

パターンをコンパイルしてから正規表現を利用する場合は次のようになります。

import re

pattern = re.compile(r'apple')
result = pattern.search('I like apple')

各種メソッドの利用

Python で文字列がパターンにマッチしているかどうか調べたり、置換を行うためのメソッドとして次の 6 種類が用意されています。(下記はパターンをコンパイルした場合ですが、文字列のまま使用する場合も同じ名前の関数がそれぞれ用意されています)。

import re

pattern = re.compile(r'apple')

# 文字列が正規表現とマッチするか確認し、マッチした文字列を取得する
result = pattern.search('I like apple')
print(bool(result))
>> True
print(result.group(0))
>> apple

# 文字列の先頭から正規表現とマッチするか確認し、マッチした文字列を取得する
result = pattern.match('I like apple')
print(bool(result))
>> False

result = pattern.match('apple is sweet')
print(bool(result))
>> True
print(result.group(0))
>> apple

# 文字列全体が正規表現とマッチするか確認し、マッチした文字列を取得する
result = pattern.fullmatch('I like apple')
print(bool(result))
>> False

result = pattern.fullmatch('apple')
print(bool(result))
>> True
print(result.group(0))
>> apple

# 文字列を正規表現を使った区切り文字で分割する
pattern = re.compile(r', | ')
result = pattern.split('I like apple, grapes, orange',)
print(result)
>> ['I', 'like', 'apple', 'grapes', 'orange']

# 正規表現を使って指定した文字列を新しい文字列に置換する
pattern = re.compile(r'Red|RED')
result = pattern.sub('red', 'Border is Red, Box is red, Line is RED')
print(result)
>> Border is red, Box is red, Line is red

Pythonで使用できるオプション(フラグ)

Python で用意されているオプション(フラグ)は次の 7 種類です。

フラグ別名インライン説明
re.ASCIIre.A(?a)メタ文字の \w 、\b 、\d 、\s がASCII文字だけにマッチするようになります。
re.DEBUG----パターンに関するデバッグ情報を表示する。
re.IGNORECASEre.I(?i)パターンで大文字と小文字を区別しなくなります。
re.LOCALEre.L(?L)メタ文字の \w 、 \b および大文字・小文字を区別しないマッチングを、現在のロケールに依存させます。
re.MULTILINEre.M(?m)複数行モード。メタ文字の ^ や $ が文字列の先頭と末尾だけでなく、各行の先頭と末尾にもマッチするようになります。
re.DOTALLre.S(?s)メタ文字の . が改行文字にもマッチするようになります。
re.VERBOSEre.X(?x)パターンの中でコメントが記述できるようになります。

-- --

Python で正規表現を利用する場合の記述方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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