Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
文字列.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() で作成したテーブルに基づいて文字を変換または削除します。 |
サンプルコード
# replace() で文字列を置換します。
text = "Pythonは難しい。Pythonを学ぼう。Pythonは素晴らしい。"
result = text.replace("難しい", "楽しい")
print(result) # Pythonは楽しい。Pythonを学ぼう。Pythonは素晴らしい。
# count を指定して置換回数を制限します。
text2 = "a b c a b c a"
print(text2.replace("a", "X", 2)) # X b c X b c a(最初の2個だけ置換)
# 文字を削除するには空文字列に置換します。
html_like = "こんにちは、<b>太郎</b>さん!"
clean = html_like.replace("<b>", "").replace("</b>", "")
print(clean) # こんにちは、太郎さん!
# replace() は元の文字列を変更しません(文字列はイミュータブル)。
original = "hello"
new = original.replace("l", "r")
print(original) # hello(変わっていません)
print(new) # herro
# maketrans() と translate() で複数文字を一度に変換します。
# ひらがなをカタカナに変換する簡易版です(一部の文字)。
table = str.maketrans("あいうえお", "アイウエオ")
print("あいうえお".translate(table)) # アイウエオ
# 数字を全角に変換します。
digit_table = str.maketrans("0123456789", "0123456789")
print("2026年3月5日".translate(digit_table)) # 2026年3月5日
# 特定の文字を削除します(第3引数で指定した文字が削除対象)。
remove_table = str.maketrans("", "", "aeiou") # 母音を削除します。
print("hello world".translate(remove_table)) # hll wrld
# 辞書で変換テーブルを指定することもできます(Unicode コードポイントを使います)。
table2 = str.maketrans({"A": "あ", "B": "い", "C": "う"})
print("ABCABC".translate(table2)) # あいうあいう
# 改行コードを統一する実用例です。
mixed_newlines = "行1\r\n行2\r行3\n行4"
unified = mixed_newlines.replace("\r\n", "\n").replace("\r", "\n")
print(repr(unified)) # '\n' だけの改行に統一されます。
概要
Pythonの文字列はイミュータブル(変更不可)です。『replace()』は元の文字列を変更するのではなく、置換結果の新しい文字列オブジェクトを返します。元の変数を更新したい場合は『text = text.replace(old, new)』のように再代入してください。
複数の文字列を順番に置換する場合、『replace()』を連鎖させる(メソッドチェーン)方法が一般的です。ただし、置換件数が多い場合は『translate()』の方が高速です。テキストのクレンジング(不要な文字の一括削除や変換)には『translate()』が特に効果的です。
正規表現を使った高度なパターンマッチングと置換には、標準ライブラリの『re』モジュールの『re.sub()』を使います。例えば連続する空白を1つに置換する場合は『re.sub(r"\s+", " ", text)』が便利です。文字列の検索については『str.find() / str.index()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。