Python で文字列内の複数の文字を置換する方法

Rayven Esplanada 2023年10月10日
  1. Python で複数の文字を置換するには str.replace() を使用する
  2. Python で複数の文字を置換するための re.sub() または re.subn() の使用法
  3. Python で複数の文字を置換するには translate()maketrans() を用いる
Python で文字列内の複数の文字を置換する方法

このチュートリアルでは、Python で文字列内の複数の文字を置換する方法を紹介します。

ここでは、文字列の中の特殊文字を削除して、空白文字に置き換えたいとします。

  • 削除する特殊文字のリストは !#$%^&*() となります。
  • また、カンマ , を空白に置き換えたいとします。
  • 操作するテキストのサンプル。
A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$

Python で複数の文字を置換するには str.replace() を使用する

データ型 strreplace() メソッドを用いて部分文字列を別の出力に置き換えることができます。

1つ目のパラメータは文字列をマッチさせたい正規表現パターンであり、2つ目のパラメータはマッチさせた文字列の置換文字列です。

また、replace() の 3 番目のオプションパラメータとして、整数を指定して実行する置換の最大数を指定することができます。count パラメータに 2 を指定した場合、replace() 関数は文字列内の 2つのインスタンスのみをマッチさせて置換します。

str.replace('Hello', 'Hi') は文字列内のすべての Hello インスタンスを Hi に置き換えます。Hello World という文字列があって、これに replace 関数を実行すると、実行後は Hi World になります。

上で宣言したサンプルテキストに replace を使ってみよう。まず、各文字をループさせて特殊文字を削除し、空の文字列に置き換えた後、カンマを空白に変換します。

txt = "A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$"


def processString(txt):
    specialChars = "!#$%^&*()"
    for specialChar in specialChars:
        txt = txt.replace(specialChar, "")
    print(txt)  # A,Quick,brown,fox,jumped,over,the,lazy,dog
    txt = txt.replace(",", " ")
    print(txt)  # A Quick brown fox jumped over the lazy dog

つまり、spChars の角括弧内の文字は、txt.replace(spChars, '') を使って空の文字列に置き換えられます。

最初の replace() 関数の文字列の結果は次のようになります。

A, Quick, brown, fox, jumped, over, the, lazy, dog

次の replace() はカンマ , のインスタンスをすべて単一の空白に置き換えます。

A Quick brown fox jumped over the lazy dog

Python で複数の文字を置換するための re.sub() または re.subn() の使用法

Python では、re モジュールをインポートすることができます。

re の中には、sub()subn() のような関数があります。

これらのメソッドについて、別の文字列の例を宣言してみましょう。例えば、文字列内のすべての数値を X に置き換えたいとします。

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."

Python re.sub() で複数の文字を置き換える

この関数には 3つの主要な引数があります。第 1 引数は正規表現パターン、第 2 引数はマッチしたパターンを置き換える文字列、第 3 引数は操作する文字列です。

文字列内のすべての数値を X に変換する関数を作成します。

import re

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."


def processString3(txt):
    txt = re.sub("[0-9]", "X", txt)
    print(txt)


processString3(txt)

出力:

Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.

Python で複数の文字を置換するための re.subn()

この関数は基本的には re.sub() と同じですが、変換された文字列と置換された数のタプルを返します。

import re

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."


def processString4(txt):
    txt, n = re.subn("[0-9]", "X", txt)
    print(txt)


processString4(txt)

出力:

Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.'
txt, n = re.subn("[0-9]", "X", txt)

上のコードスニペットでは、処理された文字列は txt に、置換カウンタは n に代入されています。

re.subn() は、メトリクスとして操作したパターングループの数を記録したい場合や、さらに処理を進めたい場合に便利です。

Python で複数の文字を置換するには translate()maketrans() を用いる

translate()maketrans() は正規表現とは異なるアプローチを用いており、古い値を新しい値にマッピングするために辞書を利用しています。

maketrans() は 3つのパラメータ、または 1つの辞書を用いたマッピングを受け付けます。

  • str1 - 置換する文字の文字列
  • str2 - 上記の文字を置き換える文字列。
  • str3 - 削除する文字列。

maketrans() は元の文字列と置換文字列のマッピングテーブルです。

translate()maketrans() が返す値を受け取り、翻訳された文字列を生成します。

例えば、文字列内のすべての小文字の母音を大文字に変換し、文字列内の x, y, z をすべて削除したいとします。

txt = "Hi, my name is Mary. I like zebras and xylophones."


def processString5(txt):
    transTable = txt.maketrans("aeiou", "AEIOU", "xyz")
    txt = txt.translate(transTable)
    print(txt)


processString5(txt)

出力:

HI, m nAmE Is MAr. I lIkE EbrAs And lOphOnEs.

translate() はすべての小文字の母音を大文字に変換し、x, y, z のインスタンスをすべて削除しました。

これらのメソッドを使用するもう一つの方法は、3つの引数の代わりにマッピングの単一の辞書を使用することです。

def processString6(txt):
    dictionary = {
        "a": "A",
        "e": "E",
        "i": "I",
        "o": "O",
        "u": "U",
        "x": None,
        "y": None,
        "z": None,
    }
    transTable = txt.maketrans(dictionary)
    txt = txt.translate(transTable)
    print(txt)

これは processString5 と同じ出力を生成しますが、辞書を使って実装されています。自分にとってより便利なものを使用することができます。

要約すると、組み込みの関数や Python でインポートしたライブラリの関数を使って、文字列内の複数の文字を置換する方法が複数あります。

最も一般的な方法は replace() を使用する方法です。re.sub()subn() もかなり使いやすく覚えやすい。translate() は、文字列操作を行うために正規表現に頼らず、代わりに辞書やマップに依存しているため、異なるアプローチを用いています。

必要であれば、for ループを使って手動で文字列をループさせ、独自の条件を追加して置換することもできます。Python は既存の関数を提供していますので、自分で汚い作業をするよりもはるかに簡単です。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

関連記事 - Python String