文字列.replace() / 文字列.translate()
文字列内の特定の文字・部分文字列を別の文字列に置き換えるメソッドです。一括変換テーブルを使った高速置換もできます。
構文
# 文字列内の old を new に置き換えます(戻り値は新しい文字列) 文字列.replace(old, new, count=-1) # 複数文字の変換テーブルを作成します str.maketrans(x, y=None, z=None) # maketrans() で作成した変換テーブルで文字を置換します 文字列.translate(テーブル)
関数一覧
| メソッド | 概要 |
|---|---|
| str.replace(old, new, count=-1) | 文字列中の old を new に置き換えます。count を指定すると左から最大 count 回まで置き換えます。元の文字列は変更されません。 |
| str.maketrans(x, y, z) | translate() で使う変換テーブル(辞書)を作成します。x と y を渡すと1対1の文字変換表に、z を渡すとその文字列の各文字を None(削除)にします。 |
| str.translate(table) | maketrans() で作成したテーブルに基づいて文字を変換または削除します。 |
サンプルコード
str_replace_basic.py
# replace() で文字列を置換します
text = "Pythonは難しい。Pythonを学ぼう。Pythonは素晴らしい。"
result = text.replace("難しい", "楽しい")
print(result)
# count を指定して置換回数を制限します
text2 = "a b c a b c a"
print(text2.replace("a", "X", 2))
# 文字を削除するには空文字列に置換します
html_like = "こんにちは、<b>五条悟</b>さん!"
clean = html_like.replace("<b>", "").replace("</b>", "")
print(clean)
実行すると次のように出力されます。
python3 str_replace_basic.py Pythonは楽しい。Pythonを学ぼう。Pythonは素晴らしい。 X b c X b c a こんにちは、五条悟さん!
str_replace_translate.py
# maketrans() と translate() で複数文字を一度に変換します
# ひらがなをカタカナに変換する簡易版です(一部の文字)
table = str.maketrans("あいうえお", "アイウエオ")
print("あいうえお".translate(table))
# 数字を全角に変換します
digit_table = str.maketrans("0123456789", "0123456789")
print("2026年3月5日".translate(digit_table))
# 特定の文字を削除します(第3引数で指定した文字が削除対象)
remove_table = str.maketrans("", "", "aeiou")
print("hello world".translate(remove_table))
# 辞書で変換テーブルを指定することもできます(Unicode コードポイントを使います)
table2 = str.maketrans({"A": "あ", "B": "い", "C": "う"})
print("ABCABC".translate(table2))
実行すると次のように出力されます。
python3 str_replace_translate.py アイウエオ 2026年3月5日 hll wrld あいうあいう
str_replace_practical.py
# replace() は元の文字列を変更しません(文字列はイミュータブル)
original = "hello"
new = original.replace("l", "r")
print(original)
print(new)
# 改行コードを統一する実用例です
mixed_newlines = "行1\r\n行2\r行3\n行4"
unified = mixed_newlines.replace("\r\n", "\n").replace("\r", "\n")
print(repr(unified))
実行すると次のように出力されます。
python3 str_replace_practical.py hello herro '行1\n行2\n行3\n行4'
よくあるミス
よくあるミス1: 置換結果を変数に代入し忘れる
Pythonの文字列はイミュータブル(変更不可)です。replace() は元の文字列を変更せず、新しい文字列を返します。戻り値を使わないと置換が反映されません。
mistake1_ng.py
text = "呪術廻戦は面白い"
# 戻り値を受け取っていないので置換が反映されない
text.replace("面白い", "最高")
print(text)
実行すると次のように出力されます。
python3 mistake1_ng.py 呪術廻戦は面白い
mistake1_ok.py
text = "呪術廻戦は面白い"
# 戻り値を変数に代入する必要があります
text = text.replace("面白い", "最高")
print(text)
実行すると次のように出力されます。
python3 mistake1_ok.py 呪術廻戦は最高
よくあるミス2: maketrans() で文字数が一致しない
str.maketrans(x, y) の x と y は同じ文字数でなければなりません。文字数が異なる場合は ValueError が発生します。
mistake2_ng.py
# x と y の文字数が違う
table = str.maketrans("あいう", "アイ")
print("あいう".translate(table))
実行すると次のように出力されます。
python3 mistake2_ng.py ValueError: the first two maketrans arguments must have equal length
mistake2_ok.py
# x と y の文字数を揃えます
table = str.maketrans("あいう", "アイウ")
print("あいう".translate(table))
実行すると次のように出力されます。
python3 mistake2_ok.py アイウ
概要
Pythonの文字列はイミュータブル(変更不可)です。『replace()』は元の文字列を変更するのではなく、置換結果の新しい文字列オブジェクトを返します。元の変数を更新したい場合は『text = text.replace(old, new)』のように再代入する必要があります。
複数の文字列を順番に置換する場合、『replace()』を連鎖させる(メソッドチェーン)方法が一般的です。ただし、置換件数が多い場合は『translate()』の方が高速です。テキストのクレンジング(不要な文字の一括削除や変換)には『translate()』が特に効果的です。
正規表現を使った高度なパターンマッチングと置換には、標準ライブラリの『re』モジュールの『re.sub()』を使います。例えば連続する空白を1つに置換する場合は『re.sub(r"\s+", " ", text)』が便利です。文字列の検索については『str.find() / str.index()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。