Pythonで文字列を扱っていると、余分な空白を取り除きたい、特定の文字を削除したい、改行コードを消したいといった場面が頻繁に出てきます。ユーザー入力の前処理やファイルから読み込んだデータの整形など、文字列の削除・除去はPythonプログラミングの基本操作のひとつです。
Pythonにはstripやreplace、translateなど、文字列削除に使えるメソッドが豊富に用意されています。それぞれ得意な用途が異なるため、目的に合った方法を選ぶことが大切です。
この記事では、Pythonで文字列を削除する代表的な方法を、サンプルコードとともに丁寧に解説していきます。空白削除・末尾削除・改行削除・特定文字の除去まで幅広くカバーしていますので、ぜひ最後まで読んでみてください。
Pythonで文字列を削除するにはstrip・replace・translateが代表的な方法
それではまず、Pythonで文字列を削除するための主要なメソッドと、それぞれの使い分けについて解説していきます。
Pythonの文字列削除には用途に応じていくつかの方法が存在します。前後の空白や特定文字を取り除くstrip系、文字を置換・削除するreplace、複数の文字を一括削除するtranslateが主要な手段です。
| メソッド | 主な用途 | 特徴 |
|---|---|---|
| strip() | 前後の空白・文字を削除 | 両端のみ対象 |
| lstrip() | 左端(先頭)の文字を削除 | 先頭のみ対象 |
| rstrip() | 右端(末尾)の文字を削除 | 末尾のみ対象 |
| replace() | 特定の文字列を削除・置換 | 中間の文字も対象 |
| translate() | 複数の文字を一括削除 | 多数の文字除去に向く |
どのメソッドを使うかは「どこにある文字を削除したいか」によって変わってきます。前後の余分な文字を取り除きたいならstrip系、文字列全体から特定の文字を消したいならreplaceやtranslateを使うのが基本的な考え方です。
stripで前後の空白を削除する方法
strip()は文字列の前後にある空白やタブ、改行をまとめて取り除くメソッドです。
# strip()で前後の空白を削除
text = " アボカド "
result = text.strip()
print(f"削除前:'{text}'")
print(f"削除後:'{result}'")
# タブや改行も除去される
text2 = "\n\tドラゴンフルーツ\n"
result2 = text2.strip()
print(f"削除後:'{result2}'")
# 出力結果:削除前:' アボカド '
# 出力結果:削除後:'アボカド'
# 出力結果:削除後:'ドラゴンフルーツ'
引数なしのstrip()は、スペース・タブ・改行などあらゆる空白文字を前後から取り除いてくれます。ユーザー入力の前処理として最もよく使われる場面のひとつです。
lstripとrstripで片側だけ削除する方法
前後どちらか一方だけを削除したい場合は、lstrip()またはrstrip()を使います。
# lstrip:左端(先頭)のみ削除
text = " サーモン "
print(f"lstrip:'{text.lstrip()}'")
# rstrip:右端(末尾)のみ削除
print(f"rstrip:'{text.rstrip()}'")
# 出力結果:lstrip:'サーモン '
# 出力結果:rstrip:' サーモン'
ログファイルの行末にある改行コードだけを除去したい場合などは、rstrip()が特に重宝します。
stripに引数を渡して特定の文字を削除する方法
strip()に引数として文字列を渡すと、指定した文字を前後から取り除くことができます。
# 引数で特定の文字を指定して削除
text1 = "###ゴリラ###"
print(text1.strip("#"))
text2 = "***ロバ***"
print(text2.strip("*"))
text3 = "abcドラゴンフルーツabc"
print(text3.strip("abc"))
# 出力結果:ゴリラ
# 出力結果:ロバ
# 出力結果:ドラゴンフルーツ
引数に渡した文字列はひとつひとつの文字として扱われます。「abc」を指定した場合、a・b・cのいずれかが前後にある限り削除が続きます。文字列全体ではなく1文字ずつの指定であることに注意しましょう。
replaceで特定の文字列を削除する方法
続いては、replaceメソッドを使って文字列の中から特定の文字や文字列を削除する方法を確認していきます。
replace()は本来「置換」のメソッドですが、置換後の文字列を空文字「””」にすることで、特定の文字を削除する用途にも使えます。文字列全体を対象にできる点がstrip系との大きな違いです。
replaceで空白を削除する方法
文字列全体に含まれる空白をすべて取り除きたい場合は、replace()が適しています。
# replace()で空白を削除
text = "ネ ジ と ボ ル ト"
result = text.replace(" ", "")
print(result)
# 全角スペースを削除
text2 = "キー ボード 設定"
result2 = text2.replace(" ", "")
print(result2)
# 出力結果:ネジとボルト
# 出力結果:キーボード設定
半角スペースと全角スペースは別の文字なので、それぞれ個別にreplace()で対処する必要があります。両方まとめて削除したい場合は2回呼び出すか、後述するtranslateを使いましょう。
replaceで改行を削除する方法
ファイルから読み込んだテキストによく含まれる改行コードの削除も、replace()で対応できます。
# 改行コードを削除
text = "パソコン\nキーボード\nマウス"
print("削除前:", text)
result = text.replace("\n", "")
print("削除後:", result)
# Windowsの改行コード(\r\n)にも対応
text2 = "アボカド\r\nドラゴンフルーツ"
result2 = text2.replace("\r\n", "")
print(result2)
# 出力結果:削除前: パソコン
# 出力結果:キーボード
# 出力結果:マウス
# 出力結果:削除後: パソコンキーボードマウス
# 出力結果:アボカドドラゴンフルーツ
Windowsでは改行コードが「\r\n」になることがあるため、クロスプラットフォームで扱う場合は両方の改行コードに対応しておくと安心です。
replaceで複数の文字を順番に削除する方法
削除したい文字の種類が複数ある場合は、replace()をチェーンして呼び出す方法があります。
# メソッドチェーンで複数削除
text = "【ゴリラ】(アフリカ)*大型*"
result = text.replace("【", "").replace("】", "").replace("(", "").replace(")", "").replace("*", "")
print(result)
# 出力結果:ゴリラアフリカ大型
削除対象が少ない場合はチェーンで十分ですが、多くなるにつれてコードが長くなります。種類が多い場合はtranslateの使用を検討しましょう。
translateで複数の文字を一括削除する方法
続いては、translateメソッドを使って複数の文字を効率よく一括削除する方法を確認していきます。
translate()はstr.maketrans()と組み合わせて使うメソッドで、複数の文字を一度にまとめて削除・置換できる点が特徴です。replaceをチェーンするよりもスッキリ書けます。
maketransとtranslateを使った削除
# translateで複数文字を一括削除
text = "サーモン!!の価格は¥1,200円(税込)です。"
# 削除したい文字を第3引数に指定
table = str.maketrans("", "", "!¥,()")
result = text.translate(table)
print(result)
# 出力結果:サーモンの価格は1200円税込です。
str.maketrans()の第3引数に削除したい文字をまとめて渡すことで、一度の処理で複数の文字を取り除けます。
正規表現を使った柔軟な文字削除
より複雑なパターンの文字を削除したい場合は、reモジュールの正規表現が強力です。
import re
# 数字をすべて削除
text = "ボルト500個とネジ200本の注文"
result = re.sub(r"\d+", "", text)
print(result)
# 英数字をすべて削除
text2 = "Product: Avocado, ID: abc123"
result2 = re.sub(r"[a-zA-Z0-9]", "", text2)
print(result2)
# 出力結果:ボルト個とネジ本の注文
# 出力結果:: , :
re.sub()は「パターンにマッチする部分を別の文字列に置換する」関数で、置換先を空文字にすることで削除として使えます。数字・記号・特定パターンをまとめて除去したい場合に非常に便利でしょう。
改行を含む空白文字をまとめて削除する方法
空白・タブ・改行などあらゆるホワイトスペースを一度に除去したいときも、正規表現が活躍します。
import re
# すべての空白文字を削除
text = " ドラゴン\tフルーツ\nは\r\n甘い "
result = re.sub(r"\s+", "", text)
print(result)
# 出力結果:ドラゴンフルーツは甘い
\sはスペース・タブ・改行などのホワイトスペース全般にマッチする正規表現です。複数の空白文字が連続していても「+」で一気にまとめて削除できます。
文字列削除のよくあるユースケースと注意点
続いては、文字列削除の実践的なユースケースと、使用時に気をつけるべきポイントを確認していきます。
実際の開発では、単純な文字削除だけでなくデータ整形・入力チェック・ファイル処理などと組み合わせた活用が求められます。よく使われるパターンを押さえておきましょう。
ユーザー入力の前処理に使う
フォームやコマンドラインからの入力には、不要な空白が混入しがちです。
# ユーザー入力の前処理
user_input = " キーボード "
# 前後の空白を取り除いてから処理
cleaned = user_input.strip()
if cleaned == "キーボード":
print(f"商品「{cleaned}」が見つかりました。")
# 出力結果:商品「キーボード」が見つかりました。
strip()を入力直後に適用しておく習慣をつけると、余分な空白が原因の不具合を防げます。
CSVやファイルデータの整形に使う
CSVやテキストファイルを読み込んだ際に末尾に付く改行コードも、rstrip()で簡単に対処できます。
# ファイル読み込みを想定した整形
lines = ["アボカド\n", "サーモン\n", "ゴリラ\n"]
cleaned_lines = [line.rstrip("\n") for line in lines]
print(cleaned_lines)
# 出力結果:['アボカド', 'サーモン', 'ゴリラ']
リスト内包表記とrstrip()を組み合わせることで、複数行をまとめて整形できます。
文字列削除時の注意点
strip()のよくある誤解として、「文字列の順番」ではなく「文字の集合」として扱われる点があります。
# strip()は文字の集合として扱う(順番は関係ない)
text = "abcドラゴンフルーツcba"
print(text.strip("abc")) # a, b, c いずれかが前後にある限り削除される
# "abc" という文字列を前後から消したいわけではない
# 出力結果:ドラゴンフルーツ
strip(“abc”)は「a・b・cという3文字の集合」を前後から削除します。特定の文字列パターンを削除したい場合はreplace()や正規表現を使う方が意図通りの動作になるでしょう。
まとめ
この記事では、Pythonで文字列を削除するさまざまな方法について、strip・replace・translate・正規表現の使い方をサンプルコードとともに解説しました。
前後の空白や改行を取り除くにはstrip系メソッドが最もシンプルです。文字列全体から特定の文字を消すにはreplace()が使いやすく、複数の文字を一括除去するにはtranslateが効率的です。複雑なパターンへの対応にはreモジュールの正規表現が強力な選択肢となります。
また、Pythonの文字列はイミュータブルであるため、必ず戻り値を変数に受け取ることが基本です。用途に合ったメソッドを選び、実際のコードで積極的に活用してみてください。