Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文字列から文字を削除する方法:replace()・translate()・スライス徹底解説

Pythonでは、replace()またはtranslate()メソッドを使って、文字列から特定の文字を削除できます。どちらのメソッドも、指定した値で文字や文字列を置き換える仕組みです。置き換え後の値として空文字("")を指定すれば、対象の文字は実質的に文字列から取り除かれます。

Pythonで文字列から文字を削除するとは

文字列が常に望ましい内容だけを含んでいるとは限りません。ユーザーが入力フィールドに不要な記号を入力することもありますし、特定の文字をすべて除去したいケースもあるでしょう。

どんな文字を削除したい場合でも、Pythonには適切な手段が用意されています。

この記事では、文字列から1つまたは複数の文字を削除する方法を、実際のコード例とともに解説します。取り上げるアプローチは以下の3つです。

  • replace()メソッドを使う方法
  • translate()メソッドを使う方法
  • スライス記法で末尾の文字を削除する方法

それでは始めましょう。

replace()メソッドで文字を削除する

文字列のreplace()関数は、ある文字を別の新しい文字に置き換えます。この関数を使えば、任意の文字を空文字に置き換えることで、文字を削除できます。

ここでは、ユーザー名を入力してもらうプログラムを作成してみましょう。ユーザー名にはアンダースコア(_)を使用できないというルールがあるとします。新しいPythonファイルを作成し、次のコードを貼り付けてください。

username = input("Choose a username: ")
final_username = username.replace("_", "")

print("Your username is: " + final_username)

このコードは、input()メソッドでユーザーにユーザー名の入力を求めます。

replace()メソッドは、元の文字列からアンダースコアを検索し、そのすべてを空文字に置き換えます。その結果、アンダースコアが取り除かれたユーザー名がコンソールに出力されます。

プログラムを実行してみましょう。

Choose a username: pythonista_101
Your username is: pythonista101

コードによって、指定したユーザー名からアンダースコアが削除されました。アンダースコアを含まない文字列の場合も問題なく動作します。

Choose a username: pythonista101
Your username is: pythonista101

ユーザー名にアンダースコアが含まれていなければ、何も変更されません。

replace()メソッドで複数の文字を削除する

複数の文字を一度に削除したい場合はどうすればよいのでしょうか。それもPythonなら簡単です。forループの中でreplace()メソッドを使えば、複数の文字をまとめて削除できます。

先ほどの例では、ユーザー名からアンダースコアを1種類だけ削除しました。今度は、ピリオド(.)、アンダースコア(_)、感嘆符(!)をすべて削除してみましょう。新しいPythonファイルを作成して、次のコードを貼り付けてください。

username = input("Choose a username: ")
disallowed_characters = ".-_!"

for character in disallowed_characters:
	username = username.replace(character, "")

print("Your username is: " + username)

まず、ユーザーにユーザー名の入力を求めます。次に、ユーザー名に含めてはいけない文字をすべて集めた文字列を定義します。

続いてforループを作成します。このループは「disallowed_characters」文字列内の各文字を順番に処理し、各イテレーションで該当する文字を「username」文字列から空文字に置き換えていきます。

コードを実行してみましょう。

Choose a username: pythonista.101!!!
Your username is: pythonista101

ピリオドと感嘆符が正しく除去されました。

translate()メソッドで文字を削除する

Pythonのtranslate()メソッドは、変換テーブル(マッピングテーブル)の内容に従って文字列内の文字を置き換えます。このメソッドは引数を1つだけ受け取ります。それは、対応関係を定義した変換テーブルです。

このメソッドを使うには、まず変換テーブルを作成する必要があります。テーブルには、文字列内で置き換え対象となる文字を指定します。

translate()メソッドを使って、ユーザー名からすべてのアンダースコアを削除してみましょう。

username = input("Choose a username: ")
final_username = username.translate({ ord("_"): None })

print("Your username is: " + final_username)

このコードは、「_」文字のすべての出現箇所をNoneに置き換えます。Pythonのord()メソッドは、「_」文字に対応するUnicodeコードポイントを返します。translate()メソッドは、このコードポイントを使って削除すべき文字を識別します。

translate()メソッドで複数の文字を削除する

translate()メソッドでも、複数の文字を一度に削除できます。

そのためには、削除したい文字のリストをループ処理するイテレータを作成します。

ユーザー名から、アンダースコア・ピリオド・感嘆符をすべて削除してみましょう。

username = input("Choose a username: ")
final_username = username.translate({ ord(c): None for c in ".-_!" })

print("Your username is: " + final_username)

translate()メソッドは、「username」文字列内の各文字が、ピリオド・感嘆符・アンダースコアのいずれかに一致するかを確認します。一致する文字が見つかればNoneに置き換えられ、文字列からその文字が削除されます。

ここでは、除外対象の文字リストを反復処理するために、Pythonの辞書内包表記を使用しています。

プログラムをテストしてみましょう。

Choose a username: pythonista_100!
Your username is: pythonista101

指定した特殊文字がすべて文字列から正常に削除されました。

Pythonで文字列の末尾の文字を削除する

文字列の末尾の文字を削除するには、[:-1]というスライス記法を使います。この記法は、インデックス位置-1(末尾の文字)を除外し、それ以外のすべての文字を返します。

末尾の文字を削除する基本構文は次のとおりです。

your_string = "A string"

print(your_string[:-1])

末尾の文字を削除する実例

従業員IDから末尾の1文字を削除するプログラムを作成してみましょう。この末尾の文字は、従業員が所属する部署を示しています。

たとえば「M」という値は、マーケティング部門に所属していることを意味します。今回はこの文字を削除します。部署情報の管理方法が新システムへ移行されるため、IDから部署コードを取り除く必要があるのです。

まず、input()メソッドで従業員IDの入力を求めるところから始めます。

identifier = input("What is the employee's identifier? ")

次に、IDから末尾の文字を削除します。

new_identifier = identifier[:-1]

[:-1]は文字列のスライス操作で、末尾の1文字を取り除きます。負のインデックスを使うことで、文字列の末尾から要素を取得できるのがポイントです。続いて、新しい従業員IDをコンソールに表示しましょう。

print("The employee's new identifier is {}.".format(new_identifier))

format()文により、文字列内の波括弧({})が新しい従業員IDに置き換えられます。コードを実行して結果を確認してみましょう。

What is the employee's identifier? 28371M
The employee's new identifier is 28371.

プログラムによって、従業員IDの末尾の文字が正しく削除されました。

まとめ

文字列から1つまたは複数の文字を削除するには、replace()またはtranslate()メソッドを使います。どちらのメソッドも同じ結果をもたらします。つまり、指定した文字が含まれない文字列を返すのです。

初心者にはreplace()メソッドがおすすめです。引数が2つだけでシンプルだからです。

第1引数は置き換えたい文字、第2引数は置き換え後の値です。複数の文字を削除したい場合は、forループと組み合わせれば対応できます。

Pythonについてさらに学びたい方は、学習の進め方を解説した完全ガイドもぜひ参考にしてください。

  1. Pythonで文字列からn番目の文字を削除するプログラムの書き方

    はじめにこの記事では、以下の問題に対する解決方法を解説します。問題文 − 与えられた文字列から、指定したインデックス(i番目)の文字を削除し、その結果を表示します。Pythonの文字列では、インデックスは必ず0から始まるという点に注意してください。例えば、「Tutorialspoint」という文字列の場合、各文字のインデックスは以下のように対応しています。T u t o r i a l s p o i n t 0 1 2 3 4 5 6 7 8 9 10 11 12 13それでは、この問題を解決するためのPythonスクリプトを見ていきましょう。実装例def remove(string

  2. Pythonで文字列からn番目の文字を削除する方法【サンプルコード付き】

    Pythonにおいて、文字列は文字の配列として扱われます。そのため、先頭の文字のインデックスは「0」から始まり、各文字の位置(インデックス)を簡単に取得できます。この性質を利用すると、指定したn番目の文字だけを削除することが可能です。 基本的な考え方はシンプルです。削除したい文字のインデックス番号を受け取り、元の文字列を次の2つの部分文字列に分割します。 n番目のインデックスの文字より前の部分 n番目のインデックスの文字より後の部分 その後、この2つの部分文字列を連結すれば、n番目の文字が取り除かれた新しい文字列が完成します。 実行例 入力: python 削除するインデックス: 3 出