完全マッチするか(match)
import re
m = re.match(r"\d-\d\d", "12-34") #raw文字列で指定することで、エスケープ不要
print(m) #None 完全マッチしない
m = re.match(r"\d\d-\d\d", "12-34") #Match Objectを返す
print(m.group(0)) # "12-34"
m = re.match(r"(\d\d)-(\d\d)", "12-34") #group取得
print(m.group(0)) # "12-34"
print(m.group(1)) # "12"
print(m.group(2)) # "34"
部分一致(search)
matchとは違い文字列の一部分にマッチしても取得できる。
m = re.search(r"\d-\d\d", "12-34")
print(m.group(0)) #2-34
m = re.search(r"\d\d", "12-34")
print(m.group(0)) #12
m2 = m.re.search("12-34", m.end())) #最初のsearch時に作成された正規表現オブジェクトを再利用
print(m.group(0)) #34
正規表現オブジェクト
re.match()や、re.search()は正規表現オブジェクトの生成を省略した簡易な利用法。使い捨てのマッチングに便利だが、繰り返しマッチングを行う場合は正規表現オブジェクトを生成してからマッチングを行うほうが効率が良い。
ptn = re.compile(r"\d\d") #正規表現オブジェクトをコンパイル
print(ptn.search("12345678").group(0)) #作成した正規表現オブジェクトを利用
print(ptn.search("12345678", 2).group(0)) #作成した正規表現オブジェクトを利用