ユーニックス総合研究所

  • home
  • archives
  • python-str-replace

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内のvissVISSに置き換えられます。
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のすべてのvissVISSに置換されて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なので、vissWAOに置換されます。
文字列sにはvissVISSVissなど大文字小文字を含めた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で置換しよう