Pythonで文字を置換する

Pythonで文字列の中の文字を置換(書き換え)します。

目次

  1. replaceメソッドで置換する
  2. 正規表現で置換する
  3. 文字の変換テーブルを使って変換する

replaceメソッドで置換する

strオブジェクトのreplaceメソッドで文字を書き換えることができます。

ret = str.replace(old, new, [count])
変数 内容
str str 対象の文字列。
old str 置換のターゲットになる文字列。
new str 書き換え後の文字列。
count int 省略可。省略すると全てが対象。
ret str 置換後の全体の文字列。

strという文字列の中のoldをnewに置き換えると考えてください。

countに置換する数を指定できます。

試してみましょう。

>>> text = '赤巻紙 青巻紙 黄巻紙'
>>> text.replace('巻紙', '信号')
'赤信号 青信号 黄信号'

>>> text.replace('巻紙', '信号', 2)
'赤信号 青信号 黄巻紙'

>>> text.replace('巻紙', '信号', 0)
'赤巻紙 青巻紙 黄巻紙'

>>> text.replace('巻紙', '信号', -1)
'赤信号 青信号 黄信号'

>>> text.replace('巻紙', '信号', -2)
'赤信号 青信号 黄信号'

countに何も指定しないと、「巻紙」が全て「信号」に置換されました。

countを0にすると、置換されませんね。

変換対象の文字列オブジェクトにreplaceを付けるだけで変換してくれるので、楽ですね。

正規表現で置換する

正規表現モジュール(re)を使って置換する場合は、subメソッドを使用します。

import re

ret = re.sub(pattern, repl, string, count=0, flags=0)
変数 内容
pattern str,object 正規表現を示す文字列またはパターンオブジェクト。
repl str,function 置換後の文字列または関数。
string str 正規表現で検索される対象になる文字列。
count int 省略可。既定値は0。置換する数。
flags   省略可。既定値は0。
ret str 置換後の全体の文字列。

stringの中のpatternに一致する文字列をcountの数だけreplに置換します。

countが0のときは、パターンに一致する文字列を全て置換します。

試してみましょう。

単純な文字列の置換です。

>>> import re
>>> text = '赤巻紙 青巻紙 黄巻紙'

>>> re.sub('巻紙','信号',text)
'赤信号 青信号 黄信号'

>>> re.sub('巻紙','信号',text,1)
'赤信号 青巻紙 黄巻紙'

>>> re.sub('巻紙','信号',text,-1)
'赤巻紙 青巻紙 黄巻紙'

これくらいなら、正規表現を使うまでもありませんね。

パターンで置換してみます。

>>> import re
>>> text = '<outer><inner>text</inner></outer>'

>>> re.sub(r'(</*)inner','\\1lower',text)
'<outer><lower>text</lower></outer>'

innerタグをlowerタグに書き換えできました。

文字の変換テーブルを使って変換する

変換テーブルを使って、複数の文字をまとめて変換できます。

変換テーブルをmaketransメソッドで作成し、そのテーブルを使ってtranslateメソッドで変換を行います。maketransでテーブルを作る方法は、辞書を指定する方法と文字列を指定する方法の2通りあります。

table = str.maketrans(dict)
table = str.maketrans(old, new, [erase])

ret = str_obj.translate(table)
変数 内容
dict dict 変換元の文字と変換後の文字列を対にした辞書。
old str 変換元の文字。複数指定する場合は並べて文字列にする。
new str 変換元の文字。oldと同じ長さにすること。
erase str 省略可。Noneに変換する文字。
table table 変換テーブルを表すtableオブジェクト。
str_obj str 変換対象となる文字列。
ret str 変換結果の文字列。

oldとnewがちょっとわかりにくいですが、例えばoldを'abc'にnewを'xyz'としたときに、aがxに、bがyに、cがzに変換されます。

試してみましょう。

まずは、辞書で指定してみます。

>>> text = '赤巻紙 青巻紙 黄巻紙'

>>> table = str.maketrans({'巻': 'ロール', '紙': 'ペーパー'})

>>> text.translate(table)
'赤ロールペーパー 青ロールペーパー 黄ロールペーパー'

次に、文字列で指定してみます。

>>> text = '赤巻紙 青巻紙 黄巻紙'

>>> table = str.maketrans('赤青', '白黒', '黄')

>>> text.translate(table)
'白巻紙 黒巻紙 巻紙'

translateメソッドを使うと、文字列の交換ができます。

>>> text = '赤巻紙 青巻紙 黄巻紙'

>>> table = str.maketrans('赤青黄', '黄赤青')

>>> text.translate(table)
'黄巻紙 赤巻紙 青巻紙'

交換表がある場合は、translateが便利ですね。

広告

Pythonの文字列処理カテゴリの投稿