パターンにマッチした文字列の一部分を抽出する (正規表現のグループを利用) - Python
Pythonでパターンにマッチした文字列の一部分を抽出するコードを紹介します。
概要
正規表現でパターンにマッチした文字列の一部分を取り出す方法として、正規表現のグループ機能を利用します。
今回は名前付きグループの機能を利用して文字列を取り出します。
書式
名前なしグループ
マッチオブジェクトのグループを参照する書式は以下です。
(マッチオブジェクト).group((インデックス番号)))
名前つきグループ
名前付きグループの書式は次の通りです。
(?P<(グループ名)>(グループにマッチする正規表現式))
マッチオブジェクトのグループを参照する書式は以下です。
(マッチオブジェクト).group((グループ名)))
記述例
pattern = re.compile(r'(?P<left>\w*)=(?P<right>\w*)')
pattern = re.compile(r'"(?P<value>[0-9]*)"')
プログラム名 : 名前なしグループ
コード
以下のコードを記述します。
stringValue = 'mykey : PenguinCookie'
pattern = re.compile(r'([A-Za-z0-9\s]*):([A-Za-z0-9\s]*)')
match = pattern.search(stringValue)
if match:
print('キー名:' + match.group(1).strip());
print('値:' + match.group(2).strip());
else:
print('みつかりませんでした')
解説
パターンオブジェクトを作成します。今回のマッチパターンではグループ機能を利用し ":" 文字の左側と右側を
それぞれ取り出す正規表現式を記述しています。
stringValue = 'mykey : PenguinCookie'
pattern = re.compile(r'([A-Za-z0-9\s]*):([A-Za-z0-9\s]*)')
searchメソッドを呼び出し文字列を検索します。
match = pattern.search(stringValue)
matchオブジェクトを確認し、結果がある場合は、key, value それぞれのグループの結果を出力します。
最初のグループが
group(1)
次のグループが
group(2)
でアクセスできます。
結果から前後の空白文字を除去するため、strip() メソッドを呼び出しています。
結果が見つからなかった場合は、matchオブジェクトがNoneになるため「みつかりませんでした」の文字列を出力します。
if match:
print('キー名:' + match.group(1).strip());
print('値:' + match.group(2).strip());
else:
print('みつかりませんでした')
プログラム例 : 名前付きグループ
コード
以下のコードを記述します。
stringValue = 'mykey : PenguinCookie'
pattern = re.compile(r'(?P<key>[A-Za-z0-9\s]*):(?P<value>[A-Za-z0-9\s]*)')
match = pattern.search(stringValue)
if match:
print('キー名:' + match.group('key').strip());
print('値:' + match.group('value').strip());
else:
print('みつかりませんでした')
解説
パターンオブジェクトを作成します。今回のマッチパターンではグループ機能を利用し ":" 文字の左側と右側を
それぞれ取り出す正規表現式を記述しています。
stringValue = 'mykey : PenguinCookie'
pattern = re.compile(r'(?P<key>[A-Za-z0-9\s]*):(?P<value>[A-Za-z0-9\s]*)')
searchメソッドを呼び出し文字列を検索します。
match = pattern.search(stringValue)
matchオブジェクトを確認し、結果がある場合は、key, value それぞれのグループの結果を出力します。
結果から前後の空白文字を除去するため、strip() メソッドを呼び出しています。
結果が見つからなかった場合は、matchオブジェクトがNoneになるため「みつかりませんでした」の文字列を出力します。
if match:
print('キー名:' + match.group('key').strip());
print('値:' + match.group('value').strip());
else:
print('みつかりませんでした')
実行結果
上記のプログラムを実行します。下図の結果が表示されます。
":" で区切られた前後のキー名と値名がそれぞれ取得できています。
stringValue変数の文字列を下記に変更して再度実行します。
stringValue = 'mykey = PenguinCookie'
パターンにマッチしないため、「みつかりませんでした」のメッセージが表示されます。
正規表現のグループを利用して、パターンにマッチした文字列の一部を取り出す処理が実装できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用