Pythonで文字を置換する
Pythonで文字列の中の文字を置換(書き換え)します。
目次
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が便利ですね。
公開日
広告