Pythonで文字列を置換する具体的な方法(replace, re.sub)
- 作成日: 2021-06-17
- 更新日: 2023-12-24
- カテゴリ: Python
Pythonで文字列を置換する
Pythonでは文字列のメソッドや標準ライブラリを使うことで特定の文字列を置換することができます。
置換にはstr
のメソッドreplace()
やre
モジュールのsub()
などを使います。
結論から言うと文字列の置換は↓のようにやります。
import re
s = 'The cute cat'
result = s.replace('cat', 'dog')
print(result)
# The cute dog
result = re.sub(r'cat', 'bird', s)
print(result)
# The cute bird
この記事では文字列の置換について具体的に↓を見ていきます。
- 置換とは?
- str.replace()の使い方
- re.sub()の使い方
関連記事
頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】
文字列の描画 - Rustで作るWindowsアプリ
改行付きの文字列を描画する - Rustで作るWindowsアプリ
置換とは?
置換とは「置き換える」という意味です。
文字列の置換とは、文字列の中の特定の範囲を別の文字列で置き換えることを指します。
置換は「replace
」などと訳されることが多いです。
たとえば↓のような文字列があったとして、
The cute cat
↑の文字列の「cat
」の部分を置換したいとします。
そうですね、dog
で置換しましょう。
その場合、↓のような結果になります。
The cute dog
str.replace()の使い方
Pythonの文字列はstr
クラスですが、このstr
のメソッドにreplace()
というメソッドがあります。
これは文字列の置換用のメソッドです。
replace()
は↓のような構造になっています。
str.replace(old, new[, count])
replace()
は呼び出し元のオブジェクト(str
)内のold
にあたる文字列をnew
ですべて置き換えます。
第1引数のold
に置換対象の文字列を指定します。
第2引数のnew
に置換後の文字列を指定します。
第3引数のcount
はオプションですが、これには置換回数を指定します。何回置き換えるか? という数値です。
replace()
は返り値として置換後の文字列を返します。
replace()ですべての文字列を置換
replace()
ですべての置換対象の文字列を置き換えるには↓のようにします。
s = 'viss viss viss'
result = s.replace('viss', 'VISS')
print(result)
# VISS VISS VISS
↑の場合、replace()
の第1引数はviss
になってますが、これを大文字のVISS
で置き換えます。
元の文字列s
内のviss
はすべてVISS
で置き換えられて、その結果がresult
に入ります。
replace()で回数制限をして置換
replace()
で回数制限をして置換を実行するには、replace()
の第3引数に回数を指定します。
s = 'viss viss viss'
result = s.replace('viss', 'VISS', 2)
print(result)
# VISS VISS viss
↑の場合、replace()
の第1引数にはviss
を指定し、第2引数にはVISS
を指定しています。
そして第3引数には2
を指定しています。これは「最大で2回まで置換しろ」という意味になります。
replace()
を実行すると文字列s
内のviss
がVISS
に置き換えられます。
viss
は3つありますが、第3引数に2
を指定しているので、2
回置換されたらその時点で完了します。
↑のようにreplace()
は文字列の置換対象の文字列を先頭から検索して、見つかった順に置換していきます。
改行の置換
replace()
をよく使うケースが改行の置換をやる場合です。
たとえばWindowsのCRLF
(\r\n
)の改行をUNIX系のLF
(\n
)に置換したい場合は↓のようにします。
s = 'line 1\r\nline 2\r\n'
result = s.replace('\r\n', '\n')
print(result)
# line 1
# line 2
↑の場合\r\n
の改行がすべて\n
に置き換えられます。
re.sub()の使い方
文字列の置き換えで正規表現を使いたい場合があります。
そういう場合はre.sub
を使います。
re.sub
は↓のような構造になっています。
re.sub(pattern, repl, string, count=0, flags=0)
sub()
はstring
内のpattern
をすべてrepl
で置き換えます。
第1引数のpattern
には置換対象のパターンを指定します。
第2引数のrepl
には置換後の文字列を指定します。
第3引数のstring
には処理をする文字列を指定します。
第4引数のcount
には置換回数を指定します。
第5引数のflags
には正規表現のフラグを指定します。
reのインポート
re.sub()
を使うにはre
モジュールをインポートします。
import re
sub()ですべてのパターンを置換
sub()
ですべてのパターンを置換するには↓のようにします。
s = 'viss viss viss'
result = re.sub(r'viss', 'VISS', s)
print(result)
# VISS VISS VISS
↑の場合、文字列s
を置換しています。置換対象のパターンはr'viss'
です。
このパターンをVISS
で置換するようにしています。
結果は文字列s
のすべてのviss
がVISS
に置換されてresult
に保存されます。
sub()で置換回数を制限して置換
sub()
で置換回数を制限するには第4引数のcount
に置換回数を指定します。
s = 'viss viss viss'
result = re.sub(r'viss', 'VISS', s, 2)
print(result)
# VISS VISS viss
↑の場合、文字列s
にはviss
が3つありますが、sub()
の第4引数の置換回数には2
を指定しています。
そのため最初と次のviss
だけがVISS
に置換されて、その結果がresult
に入ります。
sub()でフラグを指定して置換
sub()
の第5引数のflags
には正規表現のフラグを指定することができます。
たとえばre.IGNORECASE
を指定すると、パターンの大文字小文字を区別せずに置換されます。
s = 'viss VISS Viss'
result = re.sub(r'viss', 'WAO', s, 3, re.IGNORECASE)
print(result)
# WAO WAO WAO
↑の場合、置換対象の文字列はs
です。パターンはr'viss'
で置換文字列はWAO
なので、viss
がWAO
に置換されます。
文字列s
にはviss
やVISS
、Viss
など大文字小文字を含めたviss
が格納されています。
第5引数のflags
にはre.IGNORECASE
が指定されているので、パターンは大文字小文字を区別せずに処理されます。
sub()に指定する正規表現の例
正規表現のシンタックスは↓の公式ページから確認できます。
ここでは正規表現の例をいくつか紹介します。
↓のように[a-z]+
を指定することで1つ以上のa ~ z
のアルファベットにマッチさせることができます。
s = 'The green cat'
result = re.sub(r'c[a-z]+', 'VISS', s)
print(result)
# The green VISS
↓のように\d+
と指定することで1つ以上の整数にマッチさせることができます。
s = 'Since 2021'
result = re.sub(r'\d+', 'VISS', s)
print(result)
# Since VISS
↓のように\s
を指定することでスペースにマッチさせることができます。
s = 'One Two Three Four'
result = re.sub(r'\s', '-', s)
print(result)
# One-Two-Three-Four
おわりに
今回はPythonの文字列の置換について見てみました。
最後になりますが、置換は(ちかん)と読みます。
🦝 < Pythonで置換しよう