【Python】文字列を置換する方法(replace, str.translate, re.sub, re.subn)
今回はPythonで文字列を置換する方法を紹介します。
基本的な置換にはreplaceメソッドを使います。
基本以外にも、一度に複数文字を置換する方法や正規表現で置換する方法も紹介するのでご覧ください。
この記事では↓の内容が分かります。
- 基本的な置換方法
- 複数文字を置換する方法
- 正規表現で置換する方法
基本的な置換方法(replaceメソッド)
str_before = "Hello, world!"
# worldをPythonに置換
str_after = str_before.replace("world", "Python")
print(str_after) # Hello, Python!
基本的な文字列の置換にはreplaceメソッドを使用します。
replaceメソッドを使うと、指定した文字列を別の文字列で置換することができます。
サンプルコードでは、str_before変数に元の文字列を代入し、replaceメソッドを使ってworldをPythonに置換しています。
なお、デフォルトだとreplaceメソッドは全ての一致箇所を置換しますが、count引数を指定すると置換する最大回数を決めることができます。
str_before = "Hello, world!"
# lを2回だけmに置換
str_after = str_before.replace("l", "m", count:=2)
print(str_after) # Hemmo, world!
このコードではcount引数に2を指定しています。
そのため、lは最初の2文字だけ置換され、worldのlは置換されていません。
複数文字を置換する方法(str.maketrans, translateメソッド)
一度に複数文字を置換するには、str.maketransメソッドとtranslateメソッドを使います。
str_before = "Hello, world!"
# lをmに、oをpに置換
change_table = str.maketrans({'l': 'm', 'o': 'p'}) # 変換テーブルを作成
str_after = str_before.translate(change_table)
print(str_after) # Hemmp, wprmd!
サンプルコードでは、lをmに、oをpに置換しています。
複数文字を置換するには先に、str.maketransメソッドで変換テーブルを作成する必要があります。このメソッドの引数には変換したい辞書(dict)を入れます。
あとはtranslateメソッドの引数に変換テーブルを入れて実行するだけです。
変換テーブル通りに、複数の文字列が一度に置換されます。
正規表現で置換する方法(re.subメソッド)
ここまで紹介した方法では、完全一致したときに文字列を置換することができます。
完全一致ではなく、正規表現によって一致した文字列を置換したいときにはre.subメソッドを使います。
import re
str_pattern = r"0\d{2,3}-\d{1,4}-\d{4}"
str_before = "電話番号は000-0000-0000です"
str_after = re.sub(str_pattern, "置き替える文字列", str_before)
print(str_after) # 電話番号は置き替える文字列です
サンプルコードでは正規表現によって電話番号の置換を行っています。
元の文字列str_beforeに含まれる000-0000-0000を"置き替える文字列"に置換しています。
re.sub(正規表現パターン, 置き替える文字列, 元の文字列)
re.subの引数はこのようになります。
置き替える文字列内に正規表現パターンと一致する文字列があれば、置き替える文字列に置換することができます。
置換の回数を知りたい場合(re.subnメソッド)
import re
str_pattern = r"0\d{2,3}-\d{1,4}-\d{4}"
str_before = "電話番号は000-0000-0000です"
str_after = re.subn(str_pattern, "置き替える文字列", str_before)
print(str_after) # ('電話番号は置き替える文字列です', 1)
ニーズは少ないかもしれませんが、置換と同時に置換した回数を調べることもできます。
その場合は、re.subメソッドでなく、re.subnメソッドを使います。
re.subnメソッドは置換後の文字列と、置換した回数をタプルの形で返します。
import re
str_pattern = r"0\d{2,3}-\d{1,4}-\d{4}"
str_before = "電話番号は000-0000-0000です"
str_after = re.subn(str_pattern, "置き替える文字列", str_before)
print(str_after[0]) # 電話番号は置き替える文字列です
print(str_after[1]) # 1
そのため、re.subnメソッドの返り値でインデックス0とインデックス1を参照すると、置換後の文字列と置換回数を得られます。
re.subメソッドとre.subnメソッドの引数一覧
re.subメソッドとre.subnメソッドの引数一覧は↓のようになります。
replaceメソッドと同じくcount引数があり、置換する最大回数を指定することもできます。
引数 | 説明 |
---|---|
pattern | 正規表現パターン |
repl | 置き替える文字列 |
string | 元の文字列 |
count | 置換する最大回数 |
flags | 正規表現のフラグ(大文字小文字の区別など) |