Pythonにおいて、文字列の一部を置換する方法について紹介します。
本記事では、下記の内容を紹介しています。
この記事で分かること
- 文字列を置換する方法
- 複数の文字列を置換する方法
- 正規表現を用いて文字列を置換する方法
- リストの文字列を置換する方法
スポンサーリンク
文字列を置換する方法
Pythonで文字列を置換する方法について紹介します。
Pythonで文字列を置換できるメソッドとして、主に以下の3つのメソッドがあります。
- replaceメソッド
- translateメソッド
- 正規表現 ( re.sub )
それぞれメソッドの特徴は以下のとおりです。
◆replaceメソッド
- 最も簡単に文字列の置換ができる。
◆translateメソッド
- 長さ1の文字列しか置換できない
- 同時に複数の文字を置換できる
◆正規表現 ( re.sub )
- 部分一致で文字列を検索し、置換できる。
replaceメソッドで文字列を置換
もっとも簡単な方法が、文字列のreplace( )メソッドを用いる方法です。
replace( )メソッドの第一引数には"置換対象文字列"、第二引数には"置換後文字列"、第三引数には"置換回数"を指定します。
"置換回数"は省略可能です。"置換回数を省略した場合は、置換対象文字列をすべて置き換えます。
書き方
文字列.replace( 置換対象文字列, 置換後文字列, 置換回数 )
以下、サンプルコードです。
fruits_1 = 'Apple Banana Orange Grape Apple Lemon Apple'
fruits_2 = fruits_1.replace('Apple', 'xxxxx')
print(fruits_2)
# xxxxx Banana Orange Grape xxxxx Lemon xxxxx
置換回数を指定した場合のサンプルコードです。
fruits_1 = 'Apple Banana Orange Grape Apple Lemon Apple'
fruits_2 = fruits_1.replace('Apple', 'xxxxx', 2)
print(fruits_2)
# xxxxx Banana Orange Grape xxxxx Lemon Apple
スポンサーリンク
複数の文字列を置換する方法
複数の文字列を置換する方法を紹介します。
複数の文字列を置換する方法として、以下の2つの方法を紹介します。
- replaceメソッドを用いて複数の文字列を置換
- translateメソッドを用いて複数の文字列を置換
それぞれについて、順番に紹介します。
replaceメソッドを用いて複数の文字列を置換
replace( )メソッドを複数回使用することで、複数の文字列を置換することができます。
以下、サンプルコードです。
fruits_1 = 'Apple Banana Orange Grape Apple Lemon Apple'
fruits_2 = fruits_1.replace('Banana', 'xxxxx').replace('Lemon', 'yyyyy')
print(fruits_2)
# Apple xxxxx Orange Grape Apple yyyyy Apple
replace( )メソッドは前から順番に適用されます。
はじめに置き換えた文字列が、後段の文字列の置き換えに影響しないように、replace( )メソッドの順番に注意しましょう。
fruits_1 = 'apple banana orange grape apple lemon apple'
fruits_2 = fruits_1.replace('banana', 'pineapple').replace('apple', 'peach')
print(fruits_2)
# peach pinepeach orange grape peach lemon peach
fruits_3 = fruits_1.replace('apple', 'peach').replace('banana', 'pineapple')
print(fruits_3)
# peach pineapple orange grape peach lemon peach
translateメソッドを用いて複数の文字列を置換
translate( )メソッドを用いることで、複数の文字列を置換することができます。
ただし、translate( )メソッドでは、置換対象の文字列の長さは1である必要があります。
translate( )メソッドの引数として、str.maketrans( )関数の置換テーブルを指定します。
str.maketrans( )関数には、キーとして置換対象文字を、値として置換後文字を、辞書として指定します。
書き方
文字列.translate( str.maketrans( { 置換対象文字 : 置換後文字 } ) )
以下、サンプルコードです。
fruits_1 = 'Apple Banana Orange Grape Apple Lemon Apple'
fruits_2 = fruits_1.translate(str.maketrans({'a':'A', 'e':'E'}))
print(fruits_2)
# ApplE BAnAnA OrAngE GrApE ApplE LEmon ApplE
置換対象文字列として、長さが1よりも大きい文字列を指定した場合は、ValueErrorとなります。
fruits_1 = 'Apple Banana Orange Grape Apple Lemon Apple'
fruits_2 = fruits_1.translate(str.maketrans({'Banana':'xxxxx', 'Lemon':'yyyyy'}))
print(fruits_2)
# ValueError: string keys in translate table must be of length 1
str.maketrans( )関数の引数として、辞書ではなく、3つの文字列を指定することもできます。
第三引数の "削除文字" は省略可能です。
書き方
文字列.translate( str.maketrans( 置換対象文字列, 置換後文字列, 削除文字列) )
置換対象文字列、置換後文字列には、複数の文字をまとめて指定できます。
以下、サンプルコードです。
fruits_1 = 'Apple Banana Orange Grape Apple Lemon Apple'
fruits_2 = fruits_1.translate(str.maketrans('ae', 'AE', 'n'))
print(fruits_2)
# ApplE BAAA OrAgE GrApE ApplE LEmo ApplE
スポンサーリンク
正規表現を用いて文字列を置換する方法
正規表現を用いて文字列を置換する方法を紹介します。
正規表現とは、文字列をパターンで表現する記述方法です。
正規表現を用いることで、指定したパターンに当てはまる文字列を検索することができます。
Pythonの標準ライブラリである、"reモジュール"を用いることで、正規表現を扱うことができます。
reモジュールのsub( )関数を用いることで、マッチした文字列を置換できます。
書き方
re.sub( パターン, 置換後の文字列, 検索対象の文字列, 最大置換回数)
正規表現の基本的な使用方法については、下記の記事で紹介しています。
以下、reモジュールのsub( )関数で文字列を置換するサンプルコードです。
import re
s = r'abcde, 12345, a123e'
res = re.sub(r'a...e', r'xxx', s)
print(res)
# xxx, 12345, xxx
置換回数を指定した例です。
import re
s = r'abcde, 12345, a123e'
res = re.sub(r'a...e', r'xxx', s, 1)
print(res)
# xxx, 12345, a123e
reモジュールのsubn( )関数を用いると、置換後の文字列と、置換された文字列の個数のタプルを取得できます。
import re
s = r'abcde, 12345, a123e'
res = re.subn(r'a...e', r'xxx', s)
print(res)
# ('xxx, 12345, xxx', 2)
置換回数を指定した例です。
import re
s = r'abcde, 12345, a123e'
res = re.subn(r'a...e', r'xxx', s, 1)
print(res)
# ('xxx, 12345, a123e', 1)
リスト(list)の文字列を置換する方法
リストの要素の文字列を置換する方法について紹介します。
もとのリストから、ある処理を行い新たなリストを作成する場合は、内包表記を使用すると簡潔に記述できます。
内包表記については、下記の記事で紹介しています。
以下、replace( )メソッドと、リスト内包表記を組み合わせたサンプルコードです。
fruits_1 = ['Apple', 'Banana', 'Orange', 'Grape', 'Apple', 'Lemon', 'Apple']
fruits_2 = [fruit.replace('Apple', 'xxxxx') for fruit in fruits_1]
print(fruits_2)
# ['xxxxx', 'Banana', 'Orange', 'Grape', 'xxxxx', 'Lemon', 'xxxxx']
以下、正規表現のre.sub( )関数と、リスト内包表記を組み合わせたサンプルコードです。
"A"と"e"の間に、任意の小文字アルファベットがあった場合に、文字列を置換しています。
import re
fruits_1 = ['Apple', 'Banana', 'Orange', 'Grape', 'Apple', 'Lemon', 'Apple']
fruits_2 = [re.sub(r'A[a-z]+e', r'xxxxx', fruit) for fruit in fruits_1]
print(fruits_2)
# ['xxxxx', 'Banana', 'Orange', 'Grape', 'xxxxx', 'Lemon', 'xxxxx']
スポンサーリンク