はじめに
Pythonの検索処理、re.search
とre.match
についてまとめる。
re.search
はヒットした最初の文字列を抽出し、re.match
は先頭からヒットした文字列を抽出する違いがある。それぞれヒットした場合、re.Match
オブジェクトを返す。
目次
re.search
ヒットした最初の文字列を抽出する。
構文 | 意味 |
---|---|
m = re.search(p,s) | m:検索結果re.Matchオブジェクト p:パターン文字列 r:検索文字列 |
search_sample.py
example='ABCDEF_abcdZ0123456789_Z0123456789_xyz_Z0123456789'
m = re.search(r'a.*Z',example)
#aから始まり、Zで終わる文字列の検索
print(m)
# <re.Match object; span=(7, 40), match='abcdZ0123456789_Z0123456789_xyz_Z'>
m = re.search(r'a.*?Z',example)
#aから始まり、最短のZで終わる文字列の検索
print(m)
# <re.Match object; span=(7, 12), match='abcdZ'>
同じパターンが含まれる場合、最短でヒットさせたい場合は?
を使う。
re.match
先頭からヒットした文字列を抽出する。
構文 | 意味 |
---|---|
m = re.match(p,s) | m:検索結果re.Matchオブジェクト p:パターン文字列 r:検索文字列 |
match_sample.py
example='ABCDEF_abcdZ0123456789_Z0123456789_xyz_Z0123456789'
m = re.match(r'a.*Z',example)
#aから始まり、Zで終わる文字列の検索
print(m)
# None 先頭からヒットしないのでNone
example='abcdZ0123456789_Z0123456789_xyz_Z0123456789'
m = re.match(r'a.*Z',example)
#aから始まり、Zで終わる文字列の検索
print(m)
# <re.Match object; span=(0, 33), match='abcdZ0123456789_Z0123456789_xyz_Z'>
re.Matchオブジェクト
検索結果はre.Matchオブジェクトに格納される。オブジェクトのパラメータは下記の通り。
rematch_sample.py
example='abcdefg_01234567890@xxx.yyy.com'
m = re.search(r'(a.*)(@)(.*)',example)
print(m)
# <re.Match object; span=(0, 31), match='abcdefg_01234567890@xxx.yyy.com'>
print(f'{m.start()=}') # m.start()=0
print(f'{m.end()=}') # m.end()=31
print(f'{m.span()=}') # m.span()=(0, 31)
print(f'{m.groups()=}') # m.groups()=('abcdefg_01234567890', '@', 'xxx.yyy.com')
print(f'{m.group(0)=}') # m.group(0)='abcdefg_01234567890@xxx.yyy.com'
print(f'{m.group(1)=}') # m.group(1)='abcdefg_01234567890'
print(f'{m.group(2)=}') # m.group(2)='@'
print(f'{m.group(3)=}') # m.group(3)='xxx.yyy.com'
for i in m.groups():
print(i)
# abcdefg_01234567890
# @
# xxx.yyy.com
re.Matchの詳細は下記参照。