文字列 文法・環境

【Python】文字列を置換する方法【replace、正規表現など】

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モジュール】

以下、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)の文字列を置換する方法

リストの要素の文字列を置換する方法について紹介します。

もとのリストから、ある処理を行い新たなリストを作成する場合は、内包表記を使用すると簡潔に記述できます。

内包表記については、下記の記事で紹介しています。

内包表記の基本的な使い方【リスト、辞書、if、三項演算子】

以下、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']

スポンサーリンク

-文字列, 文法・環境
-,