Pythonで文字列を置換する方法について書いています。
Pythonで文字列を置換する時には、下記のメソッドを使います。
・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!!!!!!」が出力されて、置換されていることが確認できました。
コメント