Pythonのreplaceで文字列を置換する方法

【Python】replaceで文字列を置換する方法

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Python文字列の一部を別の文字列に置き換えたい場面は、データの整形やテキスト処理など、日常的なプログラミング作業で頻繁に発生します。Pythonで文字列を置換する際によく使われるのが、strのreplaceメソッドです。引数の指定次第で、全置換・部分置換・削除といった操作を簡単に実現できます。

しかし、replaceメソッドの引数の意味や、複数の文字列をまとめて置換する方法を正確に理解できていない方も多いのではないでしょうか。特に複数置換を行う場合は、置換順序によって意図しない結果が発生する可能性もあります。

この記事では、Pythonのreplaceメソッドの基本的な使い方を中心に解説します。複数文字列の一括置換や、replaceで対応できないケースの選択肢まで、サンプルコード付きで紹介していきます。



Pythonのreplaceメソッドで文字列を置換する方法

replaceメソッドとは、文字列内の指定した部分文字列を別の文字列に置き換える、str型のメソッドです。基本的な構文は以下の通りです。

文字列.replace(old, new, count=-1)

第1引数のoldには置換対象の文字列、第2引数のnewには置換後の文字列を指定します。第3引数のcountは省略可能で、置換する最大回数を指定できます。

countのデフォルト値は-1で、省略時や-1を指定した場合は全ての一致箇所が置換されます。また、Pythonの文字列はイミュータブル(不変)であるため、replaceメソッドは元の文字列を変更せず、新しい文字列を返します。

Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.

出典:Python公式ドキュメント - Built-in Types str.replace

ここからは、replaceメソッドの代表的な3つの使い方(全置換・回数指定・削除)を、サンプルコード付きで順に見ていきます。

指定した文字列を別の文字列に置換する

replaceメソッドの最も基本的な使い方は、第1引数に置換対象の文字列、第2引数に置換後の文字列を指定する方法です。第3引数を省略した場合、対象の文字列に含まれる全ての一致箇所が置換されます。

text = "Python is fun. Python is powerful."
result = text.replace("Python", "Java")
print(result)
# 出力: Java is fun. Java is powerful.

上記のコードでは、変数textに格納された文字列内の「Python」を全て「Java」に置換しています。replaceメソッドは元の文字列を変更しないため、置換結果を利用するには戻り値を変数に代入する必要があります。

なお、置換対象の文字列が見つからない場合は、元の文字列がそのまま返されるため、エラーは発生しません。

置換回数を指定して先頭から順に置換する

replaceメソッドの第3引数にcountを指定すると、先頭から指定した回数分だけ置換を行います。文字列内に同じ文字列が複数回出現する場合に、最初のN個だけを置換したいときに便利です。

text = "apple, apple, apple, apple"
result = text.replace("apple", "orange", 2)
print(result)
# 出力: orange, orange, apple, apple

上記のコードでは、第3引数に2を指定しているため、先頭から2つの「apple」だけが「orange」に置換されています。3つ目以降の「apple」はそのまま残ります。

なお、countに0を指定した場合は置換が一切行われず、元の文字列がそのまま返されます。

空文字を指定して特定の文字列を削除する

replaceメソッドの第2引数に空文字("")を指定すると、対象の文字列を削除できます。不要な文字やスペース、記号を取り除きたい場合に有効な方法です。

text = "Hello   World"
result = text.replace(" ", "")
print(result)
# 出力: HelloWorld

phone = "090-1234-5678"
result = phone.replace("-", "")
print(result)
# 出力: 09012345678

上記のコードでは、1つ目の例でスペースを全て削除し、2つ目の例で電話番号からハイフンを削除しています。

replaceメソッドは指定した部分文字列に一致する箇所を全て置換するため、「 」(半角スペース1つ)を置換対象にすると連続するスペース内の各スペースにもそれぞれ一致します。その結果、すべてのスペースが除去されます。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

Pythonのreplaceで複数の文字列をまとめて置換する方法

文字列内に置換したい箇所が複数種類ある場合、replaceメソッドを1回呼ぶだけでは対応できません。Pythonでは、replaceメソッドを連続で呼び出す方法や、辞書とforループを組み合わせる方法で複数の文字列をまとめて置換できます。

置換対象が2〜3種類であればチェーン方式が簡潔ですが、それ以上の場合は辞書方式の方が保守しやすいでしょう。ここでは2つの代表的な方法をサンプルコード付きで解説します。

replaceをチェーンして順に置換する

replaceメソッドは文字列を返すため、戻り値に対してさらにreplaceメソッドを呼び出すチェーン(連鎖)が可能です。メソッドチェーンとは、メソッドの戻り値に対して続けて別のメソッドを呼び出す記法のことです。

text = "I like apple and banana."
result = text.replace("apple", "grape").replace("banana", "melon")
print(result)
# 出力: I like grape and melon.

上記のコードでは、最初のreplaceで「apple」を「grape」に置換した戻り値に対して、2つ目のreplaceで「banana」を「melon」に置換しています。

チェーン方式は置換対象が少ない場合に読みやすい一方、置換が左から右へ順番に実行されるため、先に置換した結果が後の置換に影響する場合がある点に注意してください。たとえば「A→B」の後に「B→C」を実行すると、元のAもCに置き換わってしまいます。

forループと辞書で一括置換する

置換対象が多い場合は、辞書(dict)に置換前と置換後のペアを定義し、forループで順に適用する方法が便利です。辞書を使うことによって置換ルールをデータとして管理できるため、追加や変更が容易です。

text = "東京都 渋谷区 神宮前 1-2-3"
replacements = {
    "東京都": "Tokyo",
    "渋谷区": "Shibuya",
    "神宮前": "Jingumae"
}

for old, new in replacements.items():
    text = text.replace(old, new)

print(text)
# 出力: Tokyo Shibuya Jingumae 1-2-3

上記のコードでは、replacements辞書に3組の置換ルールを定義し、forループで辞書のキーと値を取り出しながら順に置換を実行しています。Python 3.7から辞書の挿入順保持が言語仕様として保証されているため、辞書に登録した順で置換が実行されます。

ただしこの方法でもチェーン方式と同様に、先に置換した結果が後の置換対象と一致すると意図しない動作が発生します。置換ルール同士が干渉しないことを事前に確認してください。

Pythonのreplaceで対応できないケースと代替手段

replaceメソッドは「固定の文字列を指定して置換する」ためのメソッドであるため、パターンベースの条件や文字単位の変換には向いていません。ここではreplaceで対応が難しい代表的なケースと、その際に検討したい代替手段を紹介します。

パターンに一致する文字列を置換したい場合(re.sub)

「電話番号のような特定形式の文字列だけを置換したい」「大文字・小文字を区別せずに置換したい」といったケースでは、replaceメソッドでは対応できません。これらのケースでは、標準ライブラリのreモジュールに含まれるre.sub関数を使って正規表現ベースの置換を行います。

import re

text = "電話番号: 090-1234-5678"
result = re.sub(r"\d{2,4}-\d{2,4}-\d{4}", "***-****-****", text)
print(result)
# 出力: 電話番号: ***-****-****

上記のコードでは、ハイフン区切りの数字列(電話番号に似た形式)に一致する箇所を、正規表現パターンによって一括でマスキングしています。また、re.subにflags=re.IGNORECASEを渡せば、大文字・小文字を区別しない置換も可能です。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

複数の文字を1文字ずつ一括変換したい場合(translate)

「全角数字を半角数字に変換したい」「複数の記号をまとめて削除したい」といった1文字単位の変換を行いたい場合は、str型のtranslateメソッドを使うと効率的です。replaceメソッドを何度も呼び出す代わりに、変換テーブルを1つ作成すれば1回の呼び出しで処理が完了します。

text = "09012345678"
table = str.maketrans("0123456789", "0123456789")
result = text.translate(table)
print(result)
# 出力: 09012345678

上記のコードでは、全角数字10文字と半角数字10文字を対応付けた変換テーブルを作成し、一度のtranslate呼び出しで全角数字を半角数字に変換しています。

Pythonのreplaceに関するよくある質問

Pythonのreplaceメソッドは元の文字列を変更しますか?

replaceメソッドは元の文字列を変更しません。Pythonの文字列はイミュータブル(不変)なオブジェクトであり、一度作成された文字列は変更できない仕様になっているため、replaceメソッドを含む文字列操作メソッドは常に新しい文字列を返します。

置換結果を使用するには、戻り値を変数に代入する必要があります。

操作 結果
text.replace("a", "b") 新しい文字列を返す(textは変更されない)
text = text.replace("a", "b") 置換結果をtextに再代入する

元の文字列を保持したまま置換結果を使いたい場合は、別の変数に代入してください。

大文字・小文字を区別せずに置換するにはどうすればよいですか?

replaceメソッドには大文字・小文字を無視するオプションがありません。このような場合はreモジュールのre.sub関数にre.IGNORECASEフラグを指定することで対応できます。

import re

text = "Python python PYTHON"
result = re.sub(r"python", "Java", text, flags=re.IGNORECASE)
print(result)
# 出力: Java Java Java

上記のコードでは、flags=re.IGNORECASEを指定することによって、「Python」「python」「PYTHON」の全てが「Java」に置換されています。replaceメソッドでは大文字・小文字の組み合わせごとにreplace呼び出しが必要ですが、re.subなら1回の呼び出しで対応できます。

replaceで置換対象が見つからない場合はエラーになりますか?

replaceメソッドは、第1引数に指定した文字列が対象の文字列内に見つからなくてもエラーになりません。この場合、元の文字列がそのまま返されます。

text = "Hello, World!"
result = text.replace("Python", "Java")
print(result)
# 出力: Hello, World!

上記のコードでは、text内に「Python」が存在しないため、元の「Hello, World!」がそのまま返されています。この挙動により、置換対象の有無を事前にチェックしなくても安全に呼び出せます。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する