Python 逆引き集 | 文字列操作:特定文字を削除する

Python Python
スポンサーリンク
スポンサーリンク

特定文字を削除するとはどういうことか

Pythonで文字列を扱っていると、「カンマやハイフンを取り除きたい」「記号だけを消して中身だけ残したい」「危険な文字を除去して安全な文字列にしたい」といった場面がよくあります。 こうした「文字列の中から特定の文字(または文字の集合)を取り除く」操作が、特定文字を削除するという処理です。

この処理は、

  • 入力の正規化
  • データの整形
  • セキュリティ対策(危険な文字の除去) などに直結する、とても重要なテクニックです。ここでは、初心者向けにステップバイステップで考えながら、replace()・translate()・strip() などを中心に、例題・テンプレート・注意点を丁寧に解説していきます。

最も基本的な方法:replace() で特定文字を消す

1文字を削除する基本形

text = "1-2-3-4-5"
clean = text.replace("-", "")
print(clean)  # "12345"
Python

文字列.replace(削除したい文字, 置き換える文字) は、

  • 指定した文字を
  • 別の文字列に置き換える メソッドです。

削除したい場合は、 「空文字列 "" に置き換える」 ことで、実質的にその文字を消すことができます。

複数回出てくる文字もまとめて削除される

text = "hello, world, python"
clean = text.replace(",", "")
print(clean)  # "hello world python"
Python

replace() は、

  • 文字列全体の中にある対象文字を
  • すべて置き換えます(デフォルトでは全件)

そのため、 「文字列中のカンマを全部消したい」といった処理に向いています。

一部だけ置き換えたい場合

text = "aaa-bbb-ccc"
clean = text.replace("-", "", 1)
print(clean)  # "aaabbb-ccc"
Python

3番目の引数に「最大置き換え回数」を指定すると、 左から順にその回数だけ置き換えます。

ただし、 「削除」という観点では、 「全部消す」ことが多く、回数指定はあまり使われない ことも覚えておくとよいです。

複数種類の文字をまとめて削除する:translate() を使う

複数の文字を一気に削除する

text = "hello, world. python!"
table = str.maketrans("", "", ",.!")  # 第3引数に「削除したい文字」を列挙
clean = text.translate(table)
print(clean)  # "hello world python"
Python

translate() は、

  • 「どの文字をどう変換するか」を表す変換テーブルを作り
  • それに従って文字列を変換する メソッドです。

str.maketrans("", "", "削除したい文字列") のように、 第3引数に「削除したい文字の集合」を渡すことで、 複数種類の文字をまとめて削除できます。

深掘り:replace() と translate() の違い

  • replace() → 「1種類の文字(または部分文字列)を別の文字列に置き換える」
  • translate() → 「複数種類の文字を、変換テーブルに従って一括で変換・削除する」

少数の文字なら replace() で十分ですが、

  • 記号をまとめて消したい
  • 危険な文字を一括で除去したい といった場面では、translate() の方がスッキリ書けます。

前後だけの特定文字を削除する:strip() 系の応用

先頭と末尾にある特定文字を削除する

text = "###title###"
clean = text.strip("#")
print(clean)  # "title"
Python

strip("文字集合") は、

  • 先頭と末尾に連続している「指定した文字集合に含まれる文字」を削除し
  • 中央部分はそのまま残します。

この例では、

  • 左右に連続している # を削除し
  • "title" だけを残しています。

左側だけ・右側だけ削除する

text = ">>>value<<<"

left_clean = text.lstrip(">")
right_clean = text.rstrip("<")

print(left_clean)   # "value<<<"
print(right_clean)  # ">>>value"
Python
  • lstrip("文字集合") → 左側だけ削除
  • rstrip("文字集合") → 右側だけ削除

という形で、 「先頭の記号だけ」「末尾の記号だけ」を取り除くことができます。

深掘り:strip系は「中身」は削除しない

strip()・lstrip()・rstrip() は、 「前後に連続している部分だけ」を削除する という性質があります。

文字列の中央にある同じ文字は削除されないため、

  • 「装飾記号を取り除く」
  • 「前後の空白や記号を削る」 といった用途に向いています。

特定文字削除のよくある用途

1. 数字だけを残す(記号やスペースを削除)

text = "TEL: 03-1234-5678"
table = str.maketrans("", "", "TEL: -")
digits = text.translate(table)
print(digits)  # "0312345678"
Python

電話番号やIDなど、 「数字だけを取り出したい」場面で、 不要な文字を削除することで目的の文字列を得られます。

2. カンマやドットを削除して数値文字列にする

price = "1,234,567"
clean = price.replace(",", "")
print(clean)  # "1234567"
Python

数値として扱いたい文字列から、 桁区切りのカンマを削除してから int() や float() に変換する、 というパターンはよく使われます。

3. 危険な記号を削除して安全な文字列にする

user_input = "<script>alert('xss')</script>"
table = str.maketrans("", "", "<>\"'")
safe = user_input.translate(table)
print(safe)  # scriptalert(xss)/script
Python

このように、

  • < や >、"、' などの危険な記号を削除することで
  • そのまま表示しても問題が起きにくい文字列にする

といったセキュリティ対策にも応用できます。 ただし、実務では専用のエスケープ処理やライブラリを使うことが推奨されます。

セキュリティと品質の観点から見た「特定文字削除」の注意点

危険な文字を「削除するだけ」で安全になるとは限らない

user_input = "<script>alert('xss')</script>"
safe = user_input.translate(str.maketrans("", "", "<>"))
print(safe)  # "scriptalert('xss')/script"
Python

記号を削除した結果、

  • 逆に意味のある別の文字列になってしまう
  • ログや画面上で誤解を招く表示になる

といったこともあり得ます。

そのため、 「削除すれば安全になる」と安易に考えず、 エスケープやバリデーションと組み合わせて設計することが重要です。

入力の意味が変わってしまう可能性

code = "AB-C"
clean = code.replace("-", "")
print(clean)  # "ABC"
Python

このように、 削除によって「別のコード」になってしまうことがあります。

  • 元の入力をそのまま保存する
  • 正規化後の入力を別途保存する

など、 「何を基準に判定するか」「どの値を信頼するか」 を明確にしておく必要があります。

ログや監査のときの扱い

raw = "<script>alert('xss')</script>"
safe = raw.translate(str.maketrans("", "", "<>"))

log_raw = f"raw='{raw}'"
log_safe = f"safe='{safe}'"
Python

ログに残すときは、

  • 生の入力
  • 正規化後の入力 両方を記録しておくことで、 後から「何が起きたか」を正しく追跡しやすくなります。

削除だけを行い、生の入力を捨ててしまうと、 監査や調査が難しくなることもあります。

特定文字削除のテンプレートと練習用コード

replace() で1種類の文字を削除するテンプレート

def remove_char(text: str, ch: str) -> str:
    return text.replace(ch, "")
Python

translate() で複数種類の文字を削除するテンプレート

def remove_chars(text: str, chars: str) -> str:
    table = str.maketrans("", "", chars)
    return text.translate(table)

# 例: remove_chars("hello, world. python!", ",.!")
Python

strip() で前後の特定文字を削除するテンプレート

def trim_marks(text: str, marks: str = "#") -> str:
    return text.strip(marks)
Python

危険な記号を削除してログ用に整形するテンプレート

def sanitize_for_log(text: str) -> str:
    dangerous = "<>\"'"
    table = str.maketrans("", "", dangerous)
    return text.translate(table)
Python

まとめ

  • 特定文字を削除する最も基本的な方法は replace(削除したい文字, "") であり、1種類の文字を簡単に消せます。
  • 複数種類の文字をまとめて削除したい場合は、str.maketrans() と translate() を組み合わせることで、一括削除が効率よく行えます。
  • 前後だけの特定文字を削除したい場合は、strip()・lstrip()・rstrip() を使い、装飾記号や前後の不要な文字を柔軟に取り除けます。
  • 特定文字削除は、入力の正規化・データ整形・セキュリティ対策に直結する一方で、「意味が変わる」「危険な文字列を完全には防げない」といったリスクもあるため、バリデーションやエスケープと組み合わせて設計することが重要です。

特定文字を削除するという操作は、シンプルに見えながら、 入力処理・ログ処理・セキュリティ・ユーザビリティのすべてに関わる基礎技術です。 ここを丁寧に押さえておくことで、Pythonでの文字列処理が一段と安定し、信頼できるものになっていきます。

タイトルとURLをコピーしました