用語比較
re.match()とre.search()の違い|文字列の先頭だけ調べるか、どこにあっても探すか(Python3基礎)
re.match()とre.search()の違いは調べる範囲で、match()は文字列の先頭だけ、search()は文字列のどこにあっても最初に合う場所を探します。どちらも見つかればMatchオブジェクトを、見つからなければNoneを返します。
match()はMULTILINEモードでも文字列の先頭にしか合わず、各行の先頭には合いません。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
re.match()とre.search()の要点
re.match()
文字列の先頭がパターンに合うかを調べる。先頭で合わなければ、途中に合う部分があってもNoneになる。
re.search()
文字列を先頭から走査し、パターンが最初に合う場所を探す。どの位置にあっても見つかる。
違いを表で確認
| 比較軸 | re.match() | re.search() |
|---|---|---|
| 調べる範囲 | 文字列の先頭だけ | 文字列のどの位置でも |
| re.match('c', 'abcdef')の場合 | None(先頭は'a'で、'c'ではない) | re.search('c', 'abcdef')は、2〜3の位置で'c'に合うMatchを返す |
| MULTILINEを指定したとき | それでも文字列の先頭にしか合わない。各行の先頭には合わない | パターンに^を書けば、各行の先頭にも合う |
| 見つからなかったとき | Noneを返す | Noneを返す |
| 文字列全体との一致 | 先頭から合えばよく、末尾まで合う必要はない | 文字列全体が合うことを調べるには、fullmatch()を使う |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
re.match(r'\d+', 'abc123') がNoneになった人
match()は先頭の'a'から数字が続くかを調べるので、途中の'123'は見つけません。re.search(r'\d+', 'abc123') なら'123'が見つかります。
先頭が決まった形かどうかだけ確かめたい人
先頭が決まった形かの確認なら、match()が合っています。re.match(r'\d+', '123abc') は先頭の'123'に合います。
文字列全体が決まった形かを確かめたい人
match()は先頭から合えばよく、末尾の残りは問いません。全体が合うかを調べるときは、fullmatch()を使います。re.fullmatch('ab', 'abc') はNone、re.fullmatch('abc', 'abc') は合います。
具体例で使い分ける
例 1
'abcdef'から'c'を探す場合
re.match('c', 'abcdef') と re.search('c', 'abcdef') を、それぞれ実行する場面です。
- 文字列'abcdef'の先頭は'a'です。match()は先頭がパターンに合うかを調べるので、'c'には合わず、結果は
Noneです。 - search()は先頭から順に走査し、'c'が最初に現れる位置で合います。結果は、2から3の位置で'c'に合うMatchです。
結論: match()はNone、search()は'c'に合うMatchを返します。
例 2
複数行の文字列で、行の先頭を探す場合
文字列 'A\nB\nX' に対し、MULTILINEを指定して、re.match('X', s, re.MULTILINE) と re.search('^X', s, re.MULTILINE) を実行する場面です。
- match()は、MULTILINEモードでも文字列の先頭にしか合いません。先頭は'A'なので、結果は
Noneです。 - search()でパターンに^を書くと、MULTILINEモードでは各行の先頭にも合います。3行目の先頭の'X'に合います。
結論: match()はNone、search('^X')は3行目の'X'に合うMatchを返します。
問題文から答えを選ぶ手順
- 1
先頭だけか、どこでもかを決める
先頭が決まった形かを調べたいのか、文字列のどこかに合う部分があるかを調べたいのかを決めます。
- 2
途中も探すならsearch()
文字列のどこにあっても探したいなら、search()を使います。公式もそう説明しています。
- 3
全体が合うかならfullmatch()
文字列全体がパターンに合うかを確かめたいときは、fullmatch()を使います。
- 4
結果が
Noneのときの扱いを書く見つからなかった場合は
Noneが返るので、m.group(0)のようにMatchの操作をする前に、Noneでないことを確かめます。
試験での見分け方
- 1match()は文字列の先頭だけ、search()は文字列のどの位置でも、パターンに合う場所を探す。
- 2MULTILINEを指定しても、match()は各行の先頭には合わない。
- 3文字列全体がパターンに合うかを調べるには、fullmatch()を使う。
誤答しやすい選択肢
match()は文字列のどこでも探してくれると考える
修正: match()は先頭だけです。途中にある語を探すなら、search()を使います。
match()が合えば、文字列全体が合ったと考える
修正: match()は先頭から合えばよく、末尾の残りは問いません。全体を調べるにはfullmatch()を使います。
結果がNoneかを調べずに、group()を呼ぶ
修正: 合う部分がないときはNoneが返ります。Noneにgroup()を呼ぶとエラーになるので、先にNoneかどうかを確かめます。
確認問題
Q1re.match('c', 'abcdef') の結果は何ですか?
答え: None
match()は文字列の先頭が合うかを調べます。先頭は'a'なので、'c'には合いません。
Q2re.search(r'\d+', 'abc123').group(0) の結果は何ですか?
答え: '123'
search()は文字列の途中でも、最初に合う場所を探します。'abc'の後ろの'123'に合います。
Q3文字列全体がパターンに合うかを調べたいとき、使う関数は何ですか?
答え: re.fullmatch()
fullmatch()は、文字列全体がパターンに合うときだけMatchを返します。たとえばre.fullmatch('ab', 'abc')はNoneです。
到達チェック
- match()とsearch()の調べる範囲の違いを言える
- re.match('c', 'abcdef')が
Noneになる理由を説明できる - MULTILINEでもmatch()は各行の先頭に合わないと言える
- 全体の一致にはfullmatch()を使うと答えられる
関連ページで確認する
同じ資格で次に知りたいこと
- 集合の演算子とメソッドの違い|| & - ^ と union()・intersection()の引数の扱い(Python3基礎)
集合の | & - ^ と、union()・intersection()・difference()・symmetric_difference()の違いを、引数に渡せるもの、リストを渡したときの結果、動作例で解説。Python3エンジニア認定基礎試験の集合型の確認問題つきです。
- list.remove()とlist.pop()の違い|値を指定して削除するか、位置を指定して取り出すか(Python3基礎)
list.remove()とlist.pop()の違いを、指定するもの(値か位置か)、返り値、見つからないときのエラー、同じ値が複数あるときの動きで解説。Python3エンジニア認定基礎試験の第5章(リスト)の確認問題つきです。
- 集合の | & - ^ の違い|和・積・差・対称差をPython3エンジニア認定基礎試験で判断する
集合(set)の演算子 |(和)、&(積)、-(差)、^(対称差)の違いを、公式チュートリアルの例(abracadabraとalacazam)、結果の求め方、確認問題まで解説します。
よくある質問
Qre.matchとre.searchの一番大きな違いは何ですか?
調べる範囲です。match()は文字列の先頭だけ、search()は文字列のどの位置でも、パターンに合う場所を探します。
Qre.matchで文字列の途中が見つからないのはなぜですか?
match()は先頭がパターンに合うかしか調べないためです。途中にある部分を探すなら、search()を使います。
QMULTILINEを指定すると、matchは各行の先頭に合いますか?
合いません。公式は、MULTILINEモードでも、match()に当たる関数は文字列の先頭にしか合わず、各行の先頭には合わないと説明しています。
QPython 3.15でre.match()は使えなくなりますか?
公式ドキュメントの最新版は、3.15で同じ働きのprefixmatch()という名前が加わり、match()は新しい名前に置き換えることが望ましい(ソフト非推奨)としています。match()は旧バージョンとの互換のために使い続けられる、とも書かれています。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
