記事内にはプロモーションが含まれています

【Python】特定の文字を削除する方法

【Python】特定の文字を削除する方法 Python

Pythonでテキストデータを処理していると、

「余分な空白を取り除きたい」
「特定の記号を一括で消去したい」
「リストの中から特定の単語を含む要素だけ削除したい」

こういった場面に頻繁に遭遇します。

一言で「削除」と言っても、文字列(String)の一部を消すのか、リスト(List)の要素を消すのかによって使うべきメソッドは異なります。
また、Pythonのバージョンアップに伴い、より直感的で便利なメソッドも登場しています。

この記事では、Pythonにおける「特定の文字を削除する」ためのあらゆる手法を、文字列操作とリスト操作の2つの側面に分けて、サンプルコード付きで徹底的に解説します。

現在の開発現場で推奨される最新の書き方も紹介しますので、ぜひ参考にしてください。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

文字列から特定の文字を削除する基本テクニック

Pythonの文字列は「イミュータブル(変更不可)」であるため、元の文字列を直接書き換えることはできません。
削除操作を行った「新しい文字列」を生成して返すのが基本動作となります。

まずは、最も頻繁に使われる基本的なメソッドから見ていきましょう。

replace() で特定の文字をすべて削除する

特定の文字や文字列を、文章全体から完全に消去したい場合は、replace() メソッドを使います。

「削除する」という専用のメソッドがあるわけではなく、「空文字 "" に置換する」 ことで削除を実現します。

text = "Python-is-fun-and-powerful"

# ハイフン "-" を空文字 "" に置換して削除
cleaned_text = text.replace("-", "")

print(f"元データ: {text}")
print(f"削除後  : {cleaned_text}")

実行結果

元データ: Python-is-fun-and-powerful
削除後  : Pythonisfunandpowerful

text.replace("-", "") と記述することで、変数 text に含まれるすべてのハイフンが取り除かれます。

第三引数に回数を指定することも可能で、text.replace("-", "", 2) とすれば、最初の2つだけを削除することができます。

strip() 系で両端の文字を削除する

文字列の「先頭」や「末尾」にある不要な文字(空白や改行コードなど)を削除したい場合は、strip() メソッド群を使用します。

  • strip(): 両端の文字を削除
  • lstrip(): 左側(先頭)の文字のみ削除
  • rstrip(): 右側(末尾)の文字のみ削除
text = "   Hello Python!   "

# 両端の空白を削除
print(f"strip : '{text.strip()}'")

# 左側の空白のみ削除
print(f"lstrip: '{text.lstrip()}'")

# 右側の空白のみ削除
print(f"rstrip: '{text.rstrip()}'")

実行結果

strip : 'Hello Python!'
lstrip: 'Hello Python!   '
rstrip: '   Hello Python!'

引数を指定しない場合、デフォルトで空白文字(スペース、タブ、改行)が削除されます。

text.strip("*") のように引数を指定すれば、空白以外の特定の文字を端から取り除くことも可能です。

ただし、これはあくまで「端にある文字」を消すものであり、文字列の内部にある文字は削除されません。

removeprefix() / removesuffix() で接頭辞・接尾辞を削除

Python 3.9から追加された removeprefix()removesuffix() は、特定の言葉で始まるとき(または終わるとき)だけ、その部分を削除するメソッドです。

以前はスライスや startswith を組み合わせて実装していましたが、現在はこちらを使うのがベストプラクティスです。

filename = "report_2026.txt"

# 接頭辞 "report_" を削除
name_only = filename.removeprefix("report_")

# 接尾辞 ".txt" を削除
base_name = filename.removesuffix(".txt")

print(f"接頭辞削除: {name_only}")
print(f"接尾辞削除: {base_name}")

実行結果

接頭辞削除: 2026.txt
接尾辞削除: report_2026

filename.removeprefix("report_") は、文字列が "report_" で始まっている場合のみ削除を行います。
もし始まっていなければ、元の文字列をそのまま返します。

lstrip() との違いは、「指定した文字列そのもの」を判定するかどうかです。

lstrip("report_") だと "r", "e", "p"… のいずれかの文字が先頭にある限り消してしまうため、意図しない挙動になることがありますが、removeprefix() なら安全です。

複数の文字やパターンを指定して削除する応用

「数字だけを全部消したい」「”a”と”b”と”c”をまとめて消したい」といった、少し複雑な削除を行いたい場合のテクニックを紹介します。

translate() で複数の文字を一度に削除する

特定の複数の文字(例:母音だけ、記号だけ)をまとめて削除したい場合、replace() を何度もチェーンするのは効率が悪く、コードも読みにくくなります。

そんな時は translate()str.maketrans() を組み合わせると高速に処理できます。

text = "p-y+t=h/o.n"

# 削除したい文字の辞書を作成(第3引数に削除する文字を指定)
table = str.maketrans("", "", "-+=/.")

# 変換テーブルを使って削除実行
cleaned_text = text.translate(table)

print(cleaned_text)

実行結果

python

str.maketrans("", "", 削除したい文字) で変換テーブルを作成し、それを translate() に渡すことで、指定した文字を一括で削除できます。

大量のテキストデータを処理する際に非常にパフォーマンスが良い方法です。

re.sub() で正規表現を使って削除する

「数字だけ削除」「アルファベット以外を削除」など、パターンに基づいた削除には正規表現モジュール resub() 関数を使用します。

import re

text = "Python 3.14 is released in 2025."

# 数字(\d)をすべて削除(空文字に置換)
no_digits = re.sub(r"\d+", "", text)

# アルファベットとスペース以外を削除(記号などを消す)
only_alpha = re.sub(r"[^a-zA-Z\s]", "", text)

print(f"数字削除: {no_digits}")
print(f"文字のみ: {only_alpha}")

実行結果

数字削除: Python . is released in .
文字のみ: Python  is released in 

re.sub(正規表現パターン, 置換後の文字, 対象文字列) の形式で使用します。

r"\d+" は「1文字以上の数字」を表し、これを空文字に置換することで削除を実現しています。

データのクレンジング(前処理)で非常に強力な武器となります。

スライスで位置を指定して削除する

「先頭の3文字を削除したい」「後ろから1文字消したい」といった位置による削除には、スライス機能を使います。

text = "ID:12345"

# 最初の3文字 ("ID:") を削除
# インデックス3以降を取得する
result = text[3:]

print(result)

実行結果

12345

text[3:] は「インデックス3(4文字目)から最後まで」を切り出す操作です。
結果として、インデックス0〜2(先頭3文字)が削除されたことになります。

リスト(配列)から特定の要素を削除する方法

ここまでは「1つの文字列の中」から文字を消す話でしたが、実務では「文字列のリスト」から特定の要素を削除したいケースも多々あります。

remove() と pop() の使い分け

リストから要素を削除する基本的なメソッドは以下の2つです。

  • remove(値): 指定した「値」と一致する最初の要素を削除します。
  • pop(インデックス): 指定した「位置」の要素を削除し、その値を取得します。
fruits = ["apple", "banana", "orange", "banana"]

# "banana" を削除(最初に見つかった1つだけ消える)
fruits.remove("banana")
print(f"remove後: {fruits}")

# インデックス1(この時点ではorange)を削除
removed_item = fruits.pop(1)
print(f"pop後   : {fruits}")
print(f"削除した値: {removed_item}")

実行結果

remove後: ['apple', 'orange', 'banana']
pop後   : ['apple', 'banana']
削除した値: orange

リスト内包表記で特定条件の要素を一括削除

remove() は最初の1つしか削除しません。

リスト内の「特定の文字を含む要素」をすべて削除したい場合は、リスト内包表記を使って「必要なものだけ残す(フィルタリングする)」という考え方で実装します。

files = ["data.csv", "image.jpg", "backup.csv", "memo.txt"]

# ".csv" を含むファイルを削除(=含まないファイルだけ残す)
filtered_files = [f for f in files if ".csv" not in f]

print(filtered_files)

実行結果

['image.jpg', 'memo.txt']

[f for f in files if 条件] という構文を使います。

ここでは if ".csv" not in f とすることで、「.csvを含まない要素」だけを集めた新しいリストを作成しています。

これがPythonにおける最も効率的で一般的な一括削除(フィルタリング)の方法です。

Pythonのスキルを活かして年収を上げる方法

以上、Pythonで特定の文字を削除する方法について解説してきました。

なお、Pythonのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPythonの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。