Pythonで文字列を置換する3つの方法!(replace)

Python Python

Pythonで文字列を置換する方法について書いています。
Pythonで文字列を置換する時には、下記のメソッドを使います。

・replaceメソッド
・translateメソッド
・re.subメソッド

サンプルコードはPythonのバージョン3.10.5で動作を検証しています。

replaceメソッドを使って置換する

文字列からreplaceメソッドを呼んで、呼び出し元の文字列を検索して、指定文字列で置換することができます。
例えば、下記のように使います。

text = "りんごは赤い果物です。"
result = text.replace("りんご", "いちご")

print(result) # いちごは赤い果物です。

最初にtext変数に「りんごは赤い果物です。」を代入しています。
その後に、text変数からreplaceメソッドを呼び出して、text変数の文字列を置換しています。

replaceメソッドの第1引数には置換する対象の文字列「りんご」を指定しています。
第2引数には置換する文字列「いちご」を指定しています。

置換した結果がresult変数に返ってきます。
print関数で確認すると、置換されて「いちごは赤い果物です。」が出力されることが確認できました。

置換対象が複数ある場合は?

replaceメソッドの第1引数で指定した、置換対象の文字列が複数あった場合には、全ての箇所が置換されます。
例えば、下記のような場合です。

result = "ペン パイナップル アップル ペン".replace("ペン", "ストロー")
print(result) # ストロー パイナップル アップル ストロー

2箇所の「ペン」が対象箇所になり、「ストロー」に置換されます。
結果「ストロー パイナップル アップル ストロー」が出力されます。

置換する回数を指定する

置換対象の文字列を、置換する回数を指定することも可能です。

replaceメソッドの第3引数に、置換したい回数を入れることができます。
そうすると、見つかった箇所から指定回数分、置換します。

result = "りんご, りんご, りんご, りんご, りんご".replace("りんご", "ぶどう", 3)
print(result) # ぶどう, ぶどう, ぶどう, りんご, りんご

上記は「りんご, 」という文字列を5回続けています。
置換対象が「りんご」で、置換する文字列は「ぶどう」です。

第3引数に「3」を指定しているので、文字列の先頭から3回だけ置換します。
置換した後の結果を出力すると「ぶどう, ぶどう, ぶどう, りんご, りんご」となっていることが確認できました。

複数箇所を置換したい

replaceメソッドを複数回メソッドチェーンで呼ぶことで、複数箇所を置換することが可能です。

result = "pen painapple apple pen".replace("pen", "ペン").replace("painapple", "パイナップル").replace("apple", "リンゴ")
print(result) # ペン パイナップル リンゴ ペン

文字列の「pen painapple apple pen」を置換しています。
“pen”を”ペン”に、”painapple”を”パイナップル”に、”apple”を”リンゴ”にするように複数回replaceを呼び出しています。

replaceされた文字列が、さらにreplaceされて..を繰り返します。
その結果、全ての文字列が置換されて、result変数には「ペン パイナップル リンゴ ペン」が格納されます。

translateメソッドを使って置換する

translateメソッドを使うことでも文字列を置換することが可能です。
translateメソッドも文字列から呼び出しますが、引数で指定するのが置換テーブルになります。

文字列を置換する組み合わせを渡すことで、文字列の複数対象文字を置換することが可能です。
置換対象は1文字で指定します。置換文字列にNoneを指定すると削除対象です。

例えば、下記のように使います。

replaceTable = str.maketrans({"a": "A", "e": "e!!!"})
text = "apple orange graple banana"

print(text.translate(replaceTable)) # Apple!!! orAnge!!! grAple!!! bAnAnA

str.maketransメソッドで、置換するためのデータを作成しています。
maketransメソッドに渡した、{"a": "A", "e": "e!!!"}で「a」が「A」になって、「e」が「e!!!」に置換されます。
replaceTable変数に、作成した置換テーブルのデータを保持しています。

text変数には、置換対象の文字列「apple orange graple banana」を入れています。
対象の文字列からtranslateメソッドを呼び出して、置換テーブルのデータを渡します。

そうすると、作成した置換テーブルの内容が適用されて、「Apple!!! orAnge!!! grAple!!! bAnAnA」が出力されました。
ちなみに、対象文字列が1文字でない場合は、下記のようにエラーになります。

ValueError: string keys in translate table must be of length 1

re.subメソッドを使って置換する

re.subメソッドを使うことでも、文字列を置換することができます。
re.subメソッドでは、置換対象の文字列を検索するために正規表現を使います。

例えば、下記のように使います。

import re
text = "apple014"
result = re.sub('[0-9]', '!!', text)

print(result) # apple!!!!!!

re.subはreモジュールがないと動かないため、最初にimportしています。
その後にtext変数に文字列の「apple014」を代入しました。
その次の行でre.subを使って、text変数の文字列を置換しています。

第1引数に正規表現を書いて、第2引数に正規表現にマッチした時に置換する文字列を書きます。
第3引数が置換対象の文字列です。

今回は[0-9]を正規表現で指定しているので、数値の箇所が対象になります。
置換する文字列として「!!」を指定しています。
数値ひとつにつき、ふたつの「!!」で置換されます。

結果をresult変数で受け取って、print関数で出力してみました。
文字列の「apple!!!!!!」が出力されて、置換されていることが確認できました。

コメント

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