パターンにマッチした文字列の一部分を抽出する (正規表現のグループを利用) - 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を愛用
掲載日: 2021-02-21
iPentec all rights reserverd.