用語比較
re.sub()とstr.replace()の違い|決まった文字列かパターンか(Python3基礎)
str.replace() は、決まった文字列を別の文字列に置き換えるメソッドです。re.sub() は、reモジュールの関数で、正規表現のパターンに合う部分を置き換えます。置き換える相手が決まった文字列か、パターンかが分かれ目です。
Python3エンジニア認定基礎試験は、主教材「Pythonチュートリアル 第4版」の基礎文法部分から出題されます。公式チュートリアルの標準ライブラリの項(10.5 文字列のパターンマッチ)は、re.sub() の例のあとに、最小限の機能だけが必要なら読みやすくデバッグしやすい文字列メソッドの方がお勧めだと述べ、replace() の例を載せています。
このページは、文字列の置き換えを re.sub() で書くか replace() で書くかを迷う人向けです。正規表現の記号そのものの解説は別に譲り、ここでは使い分けの基準に絞ります。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
str.replace(old, new)
決まった文字列 old を new に置き換える。re モジュールの読み込みは不要。
re.sub(pattern, repl, string)
正規表現 pattern に合う部分を repl に置き換える。re を import して使う。
使い分け
決まった文字列の置き換えなら replace()、重複した単語のようにパターンで探すなら re.sub()。
違いを表で確認
| 比較軸 | str.replace(old, new) | re.sub(pattern, repl, string) |
|---|---|---|
| 探す対象 | replace():決まった文字列(例:'too') | re.sub():正規表現のパターン(例:重複した単語を表す (\b[a-z]+) \1) |
| 使うための準備 | replace():文字列のメソッドなので import 不要 | re.sub():import re が必要 |
| 公式チュートリアルの例 | 'tea for too'.replace('too', 'two') は 'tea for two' | re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat') は 'cat in the hat' |
| 公式チュートリアルの推奨 | 最小限の機能だけが必要なら、読みやすくデバッグしやすい文字列メソッドの方がお勧め | より高度な文字列処理が必要なときに、正規表現を使う |
| 設問で目にする語(目安) | replace、文字列メソッド、置換後の文字列は何か | re.sub、パターン、r'' の文字列、\1、重複した単語 |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
文章中の特定の語を、別の語に直したい人
直したい語が決まっているなら replace() です。公式チュートリアルの 'tea for too' を 'tea for two' に直す例がこの形です。
どの単語が重複しているか分からないまま、重複を1つにしたい人
探す相手が決まった文字列ではなくパターンなので、re.sub() の出番です。公式チュートリアルは 'cat in the the hat' を 'cat in the hat' にする例を載せています。
短く書けるからと、何でも re.sub() で済ませたい人
公式チュートリアルは、最小限の機能だけなら文字列メソッドの方が読みやすくデバッグしやすいと述べています。決まった文字列の置き換えには replace() を選びます。
具体例で使い分ける
例 1
決まった語を直す例:replace()(公式チュートリアルの例)
s = 'tea for too' に対して、s.replace('too', 'two') を実行します。
- 探す相手は 'too' という決まった文字列で、パターンではありません。
- 'too' が 'two' に置き換わり、'tea for two' が返ります。
- import re は要りません。replace() は文字列のメソッドです。
結論: 答えは 'tea for two' です。決まった語の修正は replace() で足ります。
例 2
パターンで探す例:re.sub()(公式チュートリアルの例)
import re のうえで、re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat') を実行します。
- 第1引数は「英小文字の単語と、そのあとの空白、同じ単語」というパターンです。重複した単語を表します。
- 第2引数の \1 は、パターンの括弧に合った1つ目の部分を指します。2回続いた単語が1回の単語に置き換わります。
- 'the the' が 'the' になるので、結果は 'cat in the hat' です。
結論: 答えは 'cat in the hat' です。どの語が重複するか前もって分からないので、決まった文字列の replace() では書けません。
問題文から答えを選ぶ手順
- 1
置き換える相手を確認する
直す語が決まっているなら文字列、条件で表す部分ならパターンです。
- 2
文字列メソッドで足りるかを考える
足りるなら replace() にします。公式チュートリアルも、最小限の機能なら文字列メソッドをお勧めしています。
- 3
パターンが必要なら re.sub() にする
import re を書き、パターン・置換後・対象の順に引数を渡します。
試験での見分け方
- 1決まった文字列の置き換えは str.replace() を使う。
- 2パターンに合う部分の置き換えは re.sub() を使い、import re が要る。
- 3最小限の機能だけなら、読みやすくデバッグしやすい文字列メソッドの方がお勧め。
- 4re.sub() の \1 は、パターンの括弧に合った1つ目の部分を指す。
誤答しやすい選択肢
import re をせずに re.sub() を呼ぶ
修正: re モジュールを import しないと re.sub() は使えません。replace() は文字列のメソッドなので import は不要です。
重複する単語を replace() で消そうとする
修正: replace() は決まった文字列しか探せません。どの語が重複するか分からないときは re.sub() のパターンで探します。
置き換えは何でも正規表現が上位の方法だと思う
修正: 公式チュートリアルは、最小限の機能なら読みやすくデバッグしやすい文字列メソッドをお勧めしています。
確認問題
Q1'tea for too'.replace('too', 'two') の結果は何ですか?
答え: 'tea for two'
決まった文字列 'too' が 'two' に置き換わります。公式チュートリアルの例と同じです。
Q2re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat') の結果は何ですか?
答え: 'cat in the hat'
重複した単語 'the the' が1つに置き換わります。公式チュートリアルの例と同じです。
Q3最小限の機能だけが必要な置き換えで、公式チュートリアルがお勧めしているのは文字列メソッドと正規表現のどちらですか?
答え: 文字列メソッド
読みやすくデバッグしやすいという理由で、文字列メソッドの方がお勧めだと述べています。
到達チェック
- replace() は決まった文字列、re.sub() はパターンで探すと説明できる
- re.sub() を使うには import re が要ると言える
- 公式チュートリアルの2つの例の結果を言える
- 最小限の機能なら文字列メソッドがお勧めという記述を説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- json.load()とjson.loads()の違い|ファイルから読むか、文字列から読むか(Python3基礎)
json.load() はファイルのような読み取り元から、json.loads() は JSON を含む文字列(str・bytes・bytearray)から Python のオブジェクトへ戻します。Python 公式ドキュメントの記述と例、確認問題つきで使い分けを整理します。
- input()の戻り値(文字列)とint()で変換した整数の違い|足し算が連結になる理由(Python3エンジニア認定基礎試験)
input()が返す値は数字を入力しても文字列で、そのまま + を使うと足し算ではなく連結になります。int()で整数にする手順と、数字以外を入力したときのValueErrorの扱いを、公式ドキュメントの記述と計算例、確認問題つきで整理します。
- round()と四捨五入の違い|0.5が0になる偶数への丸めとは(Python3基礎)
Python の round() は、二つの倍数が同じだけ近いとき偶数の方へ丸めます。round(0.5) は 0、round(1.5) は 2 です。Python 公式ドキュメントの記述と例、round(2.675, 2) が 2.67 になる理由、確認問題つきで学校で習う四捨五入との違いを整理します。
よくある質問
Qstr.replace() と re.sub() の一番の違いは何ですか?
replace() は決まった文字列を、re.sub() は正規表現のパターンに合う部分を置き換えます。
Qre.sub() を使うのに import は必要ですか?
必要です。import re をしてから re.sub() を呼びます。replace() は文字列のメソッドなので不要です。
Qどちらを使うのがお勧めですか?
公式チュートリアルは、最小限の機能だけが必要なら、読みやすくデバッグしやすい文字列メソッドの方がお勧めだと述べています。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
