(1時間4,000円の伴走型ビデオチャット指導も受付中!)
Pythonでの文字列置換をマスターしよう!str.replace()の基本から応用まで徹底解説
![]()
【Yuki】
Hirokiくん、こんにちは。今日はPythonのプログラミングでとってもよく使う、「文字列の置換」について一緒に勉強していきましょう。
置換というのは、文字列の中にある特定の文字を、別の文字に書き換えることですね。
![]()
【Hiroki】
Yukiさん、よろしくお願いします!
文字列の置換ですね。実は今、Webサイトから取得したデータの中にある不要な空白や特定の記号を消したいなと思っていたんです。
Pythonにはそういう機能が準備されているんですよね?
![]()
【Yuki】
はい、そうです。Pythonには文字列(str型)の標準メソッドとして、str.replace() という便利な機能が用意されています。
シンプルですけれど、使いこなせるとデータの加工がすごく楽になると思います...。
まずは、一番基本的な書き方から見ていきましょう。
str.replace()の基本的な使い方
![]()
【Yuki】
str.replace()の基本的な構文は、このようになっています。
新しい文字列 = 元の文字列.replace("置換したい文字列", "新しく入れたい文字列")
![]()
【Yuki】
実際にコードを書いてみると分かりやすいかもしれませんね。
例えば、「こんにちは、Python」という文字列の「Python」を「Hirokiくん」に変えてみましょうか。
message = "こんにちは、Python"
new_message = message.replace("Python", "Hirokiくん")
print(new_message)
# 出力: こんにちは、Hirokiくん
![]()
【Hiroki】
おお、すごく直感的ですね!
replaceという名前の通り、「置き換える」という意味そのままに使えますね。
これなら僕でもすぐに覚えられそうです。
![]()
【Yuki】
えへへ、そう言ってもらえると嬉しいです。
でも、一つだけ注意しなければいけない大切なポイントがあるんです。
Pythonの文字列は「不変(イミュータブル)」といって、一度作ると中身を直接書き換えることができない性質を持っているんです...。
![]()
【Hiroki】
不変……?
さっきのコードでは、new_messageにちゃんと置換された後の文字列が入っていましたよね?
![]()
【Yuki】
そうなんです。そこが少しややこしいところなのですが、message.replace()を実行しても、元のmessageという変数の中身が書き換わるわけではないんです。
replace()は「書き換えた後の新しい文字列を新しく作って返してくれる」関数なんです。
![]()
【Hiroki】
あ、なるほど!元の文字列を直接いじっているわけじゃなくて、コピーを作ってそこを直して渡してくれているようなイメージですか?
![]()
【Yuki】
その通りです!Hirokiくん、飲み込みが早いですね。
ですから、もし以下のように書くと、期待した結果にはなりません。
text = "私はVimが好きです"
text.replace("Vim", "Python") # 置換したつもり
print(text)
# 出力: 私はVimが好きです(変わっていない!)
![]()
【Yuki】
このように、結果を別の変数に代入するか、同じ変数に上書きしないと、置換した結果は消えてしまうんです。
私はWebデザインのコードを書くときなんかも、この性質を忘れて「あれ、変わってない?」ってなっちゃうことが時々あるので、気をつけてくださいね。
複数の箇所を一度に置換する
![]()
【Hiroki】
分かりました!結果をちゃんと受け取るようにします。
ところで、同じ文字が文字列の中にたくさんある場合はどうなるんですか?
例えば、「リンゴ、バナナ、リンゴ」の「リンゴ」を全部「イチゴ」に変えたい場合です。
![]()
【Yuki】
その場合は、特に何もしなくても、見つかったすべての対象が置換されます。
デフォルトでは、一致するすべての文字列を置き換えるようになっているんです。
fruits = "リンゴ、バナナ、リンゴ"
new_fruits = fruits.replace("リンゴ", "イチゴ")
print(new_fruits)
# 出力: イチゴ、バナナ、イチゴ
![]()
【Hiroki】
全部変わるんですね。それは便利だな。
でも、逆に「最初の1つだけ変えたい」という時もありますよね?
![]()
【Yuki】
流石Hirokiくん、いいところに気がつきましたね。
そういう時は、3つ目の引数として置換する回数(count)を指定することができるんです。
置換回数を指定する方法
![]()
【Yuki】
str.replace(old, new, count)という形で、最大何回置換するかを数字で教えることができます。
text = "red, blue, red, green, red"
# 最初の2つだけ "red" を "yellow" に変える
new_text = text.replace("red", "yellow", 2)
print(new_text)
# 出力: yellow, blue, yellow, green, red
![]()
【Hiroki】
なるほど!3つ目の数字でコントロールできるんですね。
これを使えば、文章の最初の部分だけ特定の処理をしたい、といった細かい制御ができそうです。
![]()
【Yuki】
そうですね。あまり使いすぎるとコードが複雑になりますが、知っておくといつか役に立つ時が来ると思います...。
連続して置換を行う(メソッドチェーン)
![]()
【Hiroki】
あ、もう一つ質問してもいいですか?
「AをBに変えて、さらにCをDに変える」みたいに、複数の種類の文字を一度に置換したいときは、どう書くのが一番いいんでしょうか。
一度変数に入れて、また次の行でreplaceを呼ぶ、という感じですか?
![]()
【Yuki】
それでも間違いではないのですが、Pythonではメソッドチェーンという書き方を使って、すっきりと書くことができるんですよ。
replace()の結果はまた文字列なので、そのままドットで繋いでまたreplace()を呼べるんです。
# 複数の置換を一度に行う
text = "Python is fun and Python is easy."
new_text = text.replace("Python", "Programming").replace("easy", "powerful")
print(new_text)
# 出力: Programming is fun and Programming is powerful.
![]()
【Hiroki】
わあ、これなら1行で綺麗に書けますね!
読みやすくていい感じです。
![]()
【Yuki】
そう言ってもらえると嬉しいです。
ただ、あまりに長く繋げすぎると、逆に読みにくくなってしまうこともあるので注意してくださいね。
3つか4つ以上になる場合は、改行を入れるか、辞書を使ってループで回す方法もありますが...それはまた今度、応用編としてお話ししますね。
空白の削除や文字の消去への応用
![]()
【Hiroki】
そういえば、最初の方で言った「不要な空白を消したい」というのも、このreplace()でできるんですよね?
![]()
【Yuki】
はい、簡単にできます。
「特定の文字を消す」というのは、言い換えれば「特定の文字を『空の文字列("")』に置換する」ということなんです。
# 空白を削除する
raw_data = " 2024 / 05 / 20 "
clean_data = raw_data.replace(" ", "")
print(clean_data)
# 出力: 2024/05/20
![]()
【Hiroki】
なるほど!空の文字列に置き換えることで、実質的に削除したことになるんですね。
これは色々なところで使えそうです。
最新のAI開発での活用例
![]()
【Yuki】
最近はAIを使った開発も増えていますよね。
例えば、最新のAIモデルであるgemini-3-flash-previewを使ってテキストを生成したとき、出力結果に特定の形式やマークダウンの記号が含まれることがあります。
それをプログラムで加工する際にも、このreplace()はよく使われるんですよ。
![]()
【Hiroki】
AIの出力って、時々プログラムで扱うには余計な記号が入っていることがありますもんね。
![]()
【Yuki】
そうなんです。例えば最新のgoogle-genaiライブラリを使って取得したメッセージから、特定のタグを取り除いたりする時ですね。
# AIの応答に含まれる特定の書式を整える例
ai_response = "【重要】: 答えは 42 です。"
# 「【重要】: 」という部分が不要な場合
cleaned_response = ai_response.replace("【重要】: ", "")
print(cleaned_response)
# 出力: 答えは 42 です。
![]()
【Yuki】
こんなふうに、AIとのやり取りをスムーズにするための「お掃除役」としても、replace()は欠かせない存在なんです。
replace()を使う際の注意点:大文字と小文字
![]()
【Hiroki】
すごく便利だということは分かったんですけど、何か失敗しやすい落とし穴とかってありますか?
![]()
【Yuki】
そうですね...。よくあるミスとしては、「大文字と小文字を区別する」という点でしょうか。
replace()は、文字が完全に一致していないと置換してくれないんです。
text = "Python is Great."
new_text = text.replace("python", "Ruby") # "python" は小文字
print(new_text)
# 出力: Python is Great. (置換されない!)
![]()
【Hiroki】
あ、本当だ。人間が見れば同じ「パイソン」ですけど、コンピュータにとっては別物ですもんね。
![]()
【Yuki】
はい。もし大文字小文字を無視して置換したい場合は、一度全体をlower()で小文字にしてから置換するか、あるいは「正規表現」という少し高度な仕組みを使う必要があります。
でも、まずはこのreplace()の基本をしっかり押さえておくことが一番大切だと思います...。
まとめ:str.replace()のポイント
![]()
【Yuki】
今日学習した内容を簡単にまとめてみますね。
str.replace("古い文字", "新しい文字")の形で使う。- 元の文字列を書き換えるのではなく、新しい文字列を返す(代入が必要)。
- 標準では一致するすべての箇所を置換する。
- 第3引数で置換する回数を指定できる。
- ドットで繋いで連続して置換することもできる(メソッドチェーン)。
- 大文字と小文字は厳密に区別される。
![]()
【Hiroki】
ありがとうございます!
基礎的なことかもしれませんけど、仕組みをちゃんと理解すると、今までより自信を持ってコードが書けそうな気がします。
![]()
【Yuki】
そう言ってもらえると、わたしも教えた甲斐がありました。
Hirokiくんは一生懸命聞いてくれるので、ついつい話しすぎてしまったかもしれません...。
でも、文字列操作はプログラミングの基本中の基本なので、ぜひ手に馴染むまで使ってみてくださいね。
![]()
【Hiroki】
はい!さっそく自分の作っているプログラムのデータクリーニングに使ってみます。
Yukiさん、今日はありがとうございました!
![]()
【Yuki】
どういたしまして。また分からないことがあったら、いつでも聞いてくださいね。
わたしも、Hirokiくんが読みやすいコードを書けるように、陰ながら応援しています...。
参考サイト
![]()
【Yuki】
ふぅ、なんとか説明しきれたでしょうか...。
Hirokiくん、熱心にメモを取ってくれていたから、きっと大丈夫ですよね。
さて、わたしも少し休憩して、夜になったら自分のコードを書くことにします。
あ、その前に、お気に入りのフォントがちゃんとWebサイトで適用されているか、もう一度チェックしておかないと...。
ズレていると、どうしても気になって眠れなくなっちゃいますから。
冬の静かな夜は、プログラミングも読書も捗るので、今から楽しみです。
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

