home changes contents help options

052:文字列の一部を置換する

ある文字列と等しい部分を置換する

文字列メソッドの replace を用います。

>>> s = u'I love Ruby!'
>>> print s.replace(u'Ruby', u'Python')
I love Python!
>>> s = u'ルビー レシピ'
>>> print s.replace(u'ルビー', u'パイソン')
パイソン レシピ

正規表現にマッチした部分を置換する

re.sub メソッドを用います。

>>> import re
>>> s = u'あいあいあい'
>>> print re.sub(u'あい', u'愛', s)
愛愛愛

count 引数を用いると、 n 回だけの変換も可能です。

>>> print re.sub(u'あい', u'愛', s, count=1)
愛あいあい

置換文字内では \1 のような後方参照を使うことが可能です。

>>> print re.sub(u'(.)([A-Z])', ur'\1 \2', u'FrontPage')
Front Page

より複雑な変換を行うため、置換文字の代わりに関数を渡すことができます。この関数はマッチオブジェクトを一つ受け取り、変換後の文字列を返すようにします。

>>> def dashrepl(matchobj):
...   if matchobj.group(0) == u'-':
...     return u' '
...   else:
...     return u'-'
...
>>> print re.sub(u'-{1,2}', dashrepl, u'pro----gram-files')
pro--gram files

特定の文字を置換する

文字列メソッドの translate を用います。

>>> t = dict((ord(k), ord(v)) for k, v in zip(u'aiueo', u'あいうえお'))
>>> print u'abcdefghijklmn'.translate(t)
あbcdえfghいjklmn