概要
search()などのre
モジュール関数や正規表現オブジェクトメソッドが実行の結果マッチした場合に、MatchObject
オブジェクトが返される。以下、MatchObject
のオブジェクトをmatchオブジェクトと表現する。matchオブジェクトは常にブール値Trueを持ち、matchオブジェクトそのものを判定式に使ってマッチしたかどうかの判定ができる。
1 2 3 4 5 |
match = re.search(pattern, string) if match: # マッチした場合の処理 else: # マッチしなかった場合の処理 |
matchオブジェクトの文字列表現には、(最初に)ヒットした場所の範囲と、マッチした内容が含まれている。
1 2 3 4 5 6 |
import re s = "The rain in Spain stays mainly in the plain." print(re.search(r"in", s)) # <_sre.SRE_Match object; span=(6, 8), match='in'> |
正規表現・文字列情報
re
match.re
match
を生成した正規表現オブジェクト。
string
match.string
match
を生成したsearch()
、match()
へ渡された文字列。
1 2 3 4 5 6 7 |
import re match = re.search(r'\b\w{4}\b', "The rain in Spain") print(match.string) # The rain in Spain print(match.re) # re.compile('\\b\\w{4}\\b') |
グループ指定しない場合のマッチング結果
group()、start()、end()、span()
match.group()
、match.start()
、match.end()
、match.span()
group()はマッチした部分文字列、start()とend()はマッチした部分文字列の開始位置と終了位置、span()は(開始位置, 終了位置)のタプル。
1 2 3 4 5 6 |
import re match = re.search(r'in', "The rain in Spain") print(match.group()) # in print(match.start()) # 6 print(match.end()) # 8 print(match.span()) # (6, 8) |
グループ指定した場合のマッチング結果
group()
match.group()
、match.group([group1, ...])
引数がない場合は、マッチしたもの全てが返される。引数がある場合はグループを指定(数字のほかグループ名でも可)。
groups()
match.groups()
マッチしたグループを要素とするタプルとする。
lastindex
match.lastindex
複数グループの最終インデックス。
1 2 3 4 5 6 7 8 9 |
import re match = re.search(r'(\w+) (\w+)', "The rain in Spain") print(match.group()) # The rain print(match.groups()) # ('The', 'rain') print(match.lastindex) # 2 print(match.group(0)) # The rain print(match.group(1)) # The print(match.group(2)) # rain |