Pythonでテキスト処理をしていると、こんなことってありませんか?
- 「ある単語を別の言葉に置き換えたい」
- 「特定の記号を削除したい」
- 「改行文字をスペースに変えたい」
そんなときに活躍するのが、文字列メソッドのreplace()
です。
この関数はシンプルながら非常に強力で、初心者でもすぐに使いこなせるのが魅力です。
この記事では、replace()
の基本から応用的な使い方、注意点までを丁寧に解説します。
replace()とは?基本的な使い方

replace()って何をする関数?
replace()
は、文字列の中に含まれる特定の文字列を、別の文字列に置き換える関数です。
例えば:
- 「りんご」を「みかん」に変える
- 「,」を「、」に変える
- 不要な文字を削除する
といったことができます。
基本的な書き方
文字列.replace(置換対象, 置換後, 置換回数)
パラメータの説明:
- 置換対象:変更したい文字列
- 置換後:変更後の文字列
- 置換回数(省略可能):何回置き換えるか。省略するとすべて置換
基本的な使用例
# 基本的な置換
text = "apple banana apple"
new_text = text.replace("apple", "orange")
print(new_text) # 出力: orange banana orange
# 文字の削除(空文字に置換)
text = "Hello, World!"
new_text = text.replace(",", "")
print(new_text) # 出力: Hello World!
# 数値を含む文字列の置換
price = "商品価格:1000円"
new_price = price.replace("1000", "2000")
print(new_price) # 出力: 商品価格:2000円
よくある使い方
やりたいこと | コード例 | 結果 |
---|---|---|
単語を置き換える | "cat dog".replace("cat", "dog") | "dog dog" |
文字を削除する | "a-b-c".replace("-", "") | "abc" |
スペースを別の文字に | "a b c".replace(" ", "_") | "a_b_c" |
部分的な置換と応用的な使い方
置換回数を指定する
replace()
は基本的にすべての該当文字列を置き換えますが、3番目の引数を使うと、指定した回数だけ置換できます。
# 最初の1個だけ置換
text = "apple banana apple cherry apple"
new_text = text.replace("apple", "orange", 1)
print(new_text) # 出力: orange banana apple cherry apple
# 最初の2個だけ置換
text = "test test test test"
new_text = text.replace("test", "demo", 2)
print(new_text) # 出力: demo demo test test
特殊文字の処理
# 改行文字をスペースに置換
text = "Hello,\nworld!\nHow are you?"
cleaned = text.replace("\n", " ")
print(cleaned) # 出力: Hello, world! How are you?
# タブ文字をスペースに置換
text = "name\tage\tcity"
cleaned = text.replace("\t", " ")
print(cleaned) # 出力: name age city
# 複数のスペースを1つに(連続する場合)
text = "Hello world"
cleaned = text.replace(" ", " ")
print(cleaned) # 出力: Hello world
実践的な例
# CSVデータの整形
csv_data = "田中,30,東京\n佐藤,25,大阪\n"
formatted = csv_data.replace(",", " | ").replace("\n", "\n---\n")
print(formatted)
# ファイルパスの変換(WindowsからLinux)
windows_path = "C:\\Users\\name\\file.txt"
linux_path = windows_path.replace("\\", "/")
print(linux_path) # 出力: C:/Users/name/file.txt
# HTMLタグの除去(簡単なもの)
html_text = "<p>Hello <strong>world</strong>!</p>"
clean_text = html_text.replace("<p>", "").replace("</p>", "").replace("<strong>", "").replace("</strong>", "")
print(clean_text) # 出力: Hello world!
replace()でできないこととその代替手段

replace()の限界
replace()
は便利ですが、以下のようなケースには向きません:
できないこと | 理由 | 代替手段 |
---|---|---|
正規表現を使った複雑な置換 | 完全一致のみ対応 | re.sub() |
大文字・小文字を無視した置換 | 文字が完全に一致する必要がある | re.sub() |
条件付きの置換 | 単純な文字列置換のみ | re.sub() |
正規表現を使った高度な置換
import re
# メールアドレスを[email]に置換
text = "連絡先: info@example.com, support@test.jp"
new_text = re.sub(r"\S+@\S+", "[email]", text)
print(new_text) # 出力: 連絡先: [email], [email]
# 数字だけを抽出(3桁以上)
text = "価格は1000円、送料は200円です"
new_text = re.sub(r"\d{3,}", "XXX", text)
print(new_text) # 出力: 価格はXXX円、送料は200円です
大文字・小文字を無視した置換
import re
# 大文字・小文字を区別しない置換
text = "Python is fun. PYTHON is easy. python rocks!"
new_text = re.sub("python", "Java", text, flags=re.IGNORECASE)
print(new_text) # 出力: Java is fun. Java is easy. Java rocks!
# replace()では同じことができない
# text.replace("python", "Java") # 小文字のpythonのみ置換される
使い分けの目安
場面 | 使う関数 | 理由 |
---|---|---|
単純な文字列置換 | replace() | 高速で分かりやすい |
複雑なパターンマッチング | re.sub() | 正規表現が使える |
大量のデータ処理 | replace() | パフォーマンスが良い |
条件付き置換 | re.sub() | 柔軟な条件指定が可能 |
実際の開発でよく使うパターン
データクリーニング
# ユーザー入力のクリーニング
user_input = " Hello, World! \n"
cleaned = user_input.replace("\n", "").replace(" ", " ").strip()
print(f"'{cleaned}'") # 出力: 'Hello, World!'
# 電話番号の整形
phone = "090-1234-5678"
formatted_phone = phone.replace("-", "")
print(formatted_phone) # 出力: 09012345678
ファイル処理
# ファイル名の安全化
filename = "My Document (2023).txt"
safe_filename = filename.replace(" ", "_").replace("(", "").replace(")", "")
print(safe_filename) # 出力: My_Document_2023.txt
# URLの整形
url = "https://example.com/page with spaces"
clean_url = url.replace(" ", "%20")
print(clean_url) # 出力: https://example.com/page%20with%20spaces
複数の置換を効率的に行う
# 連続して複数の置換を行う
text = "Hello, world! How are you today?"
# 方法1: 連続してreplace()を使う
result = text.replace("Hello", "Hi").replace("world", "Python").replace("!", ".")
print(result) # 出力: Hi, Python. How are you today?
# 方法2: 辞書を使ったループ(複数の置換がある場合)
replacements = {
"Hello": "Hi",
"world": "Python",
"!": "."
}
result = text
for old, new in replacements.items():
result = result.replace(old, new)
print(result) # 出力: Hi, Python. How are you today?
よくある間違いと注意点
1. 元の文字列は変更されない
# 間違い:元の文字列が変わると思っている
text = "Hello World"
text.replace("World", "Python") # これだけでは何も変わらない
print(text) # 出力: Hello World(変わらない)
# 正しい:戻り値を受け取る
text = "Hello World"
new_text = text.replace("World", "Python")
print(new_text) # 出力: Hello Python
# または:同じ変数に代入し直す
text = "Hello World"
text = text.replace("World", "Python")
print(text) # 出力: Hello Python
2. 部分的な一致に注意
# 予期しない置換が起こる場合
text = "I like apples and pineapples"
result = text.replace("apple", "orange")
print(result) # 出力: I like oranges and pineoranges
# より安全な方法(単語境界を考慮)
import re
text = "I like apples and pineapples"
result = re.sub(r'\bapple\b', 'orange', text)
print(result) # 出力: I like oranges and pineapples
3. 置換回数の指定
# 置換回数を指定するときの注意
text = "test test test"
result = text.replace("test", "demo", 0) # 0回置換
print(result) # 出力: test test test(何も変わらない)
result = text.replace("test", "demo", -1) # 負の数はすべて置換
print(result) # 出力: demo demo demo
まとめ:replace()を使いこなそう!
重要なポイント
replace()
は文字列の一括置換に最適- 第3引数で回数を指定すれば柔軟な操作が可能
- 元の文字列は変更されないので戻り値を受け取ることが大切
- 正規表現が必要な場面では**
re.sub()
との使い分け**が重要
学習の順番
- 基本的な置換:単純な文字列置換から始める
- 回数指定:部分的な置換をマスター
- 特殊文字処理:改行やタブの処理
- 複数置換:効率的な連続置換
- 正規表現:より高度な置換手法
実際の開発で覚えておくこと
- データクリーニングにとても便利
- ファイル名やURLの整形によく使う
- 大量データの処理では
replace()
が高速 - 複雑な条件がある場合は
re.sub()
を検討
コメント