4.2.4 マッチオブジェクト

マッチオブジェクトインスタンスは以下のメソッドと属性をサポートしています。

group ([group1, group2, ...])
マッチした1つ以上のサブグループを返します。引き数が1つあれば、 その結果は1つの文字列です。複数の引き数があれば、その結果は引き数ごとに 1つのアイテムを持ったタプルです。引き数がなければ、group1の デフォルトは0です(つまり全体のマッチが返されます)。 groupN引き数が0なら対応する戻り値はマッチングする全体文字列です。 それが範囲[1..99]内であれば、対応する括弧付けされたグループにマッチする 文字列です。 グループ番号が負またはパターン内で定義されたグループ数より大きい場合には、 IndexError例外が発生します。 グループがマッチしないパターンの部分に含まれていれば、対応する結果は Noneです。 グループが複数回マッチしたパターンの部分に含まれていれば、最後のマッチが 返されます。

正規表現が(?P<name>...) 構文を使うときは、groupN 引き数にはそれらのグループ名でグループを特定できる文字列も許されます。 文字列引き数がパターン内でグループ名として使われていなければ、IndexError 例外が発生します。

適度に複雑な例:

m = re.match(r"(?P<int>\d+)\.(\d*)", '3.14')

このマッチング実行後は、m.group(1)'3'm.group('int') も同じく'3'm.group(2)'14'になります。

groups ()
マッチしたサブグループを1からパターン内にあるグループの数まですべて含むタプルを返します。 マッチしなかったグループに対してはNoneになります。(非互換性に関する注: オリジナルのパイソン1.5リリースではタプルが要素を1つ持つときは文字列が代わりに返されます。 それ以降のバージョンではそのような場合には要素を1つだけ持つタプルが返されます。)

start ([group])
end ([group])
groupにマッチした部分文字列の開始と終了インデックスを返します。 groupのデフォルトは0です(マッチした全部分文字列という意味)。 groupが存在するがマッチには寄与していないときはNoneを返します。 マッチオブジェクトm、マッチに寄与したグループgに対しては、 グループgにマッチした部分文字列(m.group(g)と同じ)は

m.string[m.start(g):m.end(g)]

となります。
注: 空文字列にgroupがマッチしていれば、m.start(group)m.end(group)と同じです。 例えば、m = re.search('b(c?)', 'cba')の後では m.start(0)は1で、m.end(0)は2で、m.start(1)m.end(1)はともに2で、m.start(2)IndexError例外を 発生させます。

span ([group])
マッチオブジェクト mに対して、2つのタプル (m.start(group), m.end(group))を返します。
注:groupがマッチに寄与していなければ、これは(None, None)となります。 ここでもgroupのデフォルトは0です。

pos
search()またはmatch()関数に渡されたposの値です。 これは正規表現エンジンがマッチを探し始める文字列上のインデックスです。

endpos
search()またはmatch()関数に渡されたendposの値です。 これは正規表現エンジンがマッチをそれ以上行わない文字列上のインデックスです。

re
このマッチオブジェクトインスタンスを生成したmatch()または search()メソッドを持つ正規表現オブジェクトです。

string
match()またはsearch()に渡された文字列です。

参考文献:

Jeffrey Friedl, Mastering Regular Expressions, O'Reilly. この本のパイソンの部分はreモジュール以前のものですが、 良い正規表現パターンを書くことについて非常に詳しく記述しています。

guido@python.org