[正規表現] 置換・分割

[正規表現] 置換・分割

regex.sub()

 正規表現オブジェクト (regexオブジェクト) の sub()メソッドを使うと、マッチした文字列を他の文字列で置き換えることができます。たとえば、検索対象文字列にある 2018年平成30 年 に置き換える場合は、2018 年 を表す正規表現オブジェクトを作成し、sub()メソッドの第 1 引数に '平成30 年' を渡します。

# reモジュールをインポート
import re

# 検索対象文字列
my_str = '2018年12月30日'

# 2018年にマッチする正規表現オブジェクトを作成
regex = re.compile(r'2018年')

# 2018年を平成30年に置換
s = regex.sub('平成30年', my_str)

print(s)
平成30年12月30日

 文章中の年月日を表す文字列が「西暦2018年」のようになっている可能性も考慮すると、

 (2018|西暦2018)年

という正規表現をつくっておいたほうが良いかもしれません。これは

 2018年
 西暦2018年

の両方にマッチする正規表現です。

# reモジュールをインポート
import re

# 検索対象文字列
my_str = '2018年12月30日\n西暦2018年12月30日'

# 2018年にマッチする正規表現オブジェクトを作成
# フラグにre.Mを指定してマルチラインを設定
regex = re.compile(r'(2018|西暦2018)年', re.M)

# 2018年を平成30年に置換
s = regex.sub('平成30年', my_str)

print(s)
平成30年12月30日
平成30年12月30日

 

regex.subn()

 正規表現の subn()メソッドは置き換えた文字列と置換回数をタプルで返します。
 次のコードでは、' ''' で置き換えることにより、半角スペースを削除します。

# reモジュールをインポート
import re

# 置換対象文字列
my_str = '東京都 豊島区 南池袋 x-y-z あとりえこばと出版'

# 半角スペースにマッチする正規表現オブジェクトを作成
regex = re.compile(r' ')

# 半角スペースを削除
s = regex.subn('', my_str)

print(s)
('東京都豊島区南池袋x-y-zあとりえこばと出版', 4)

 実行結果をみると、削除されたスペースが 4 個であることがわかります。
 

regex.split()

 正規表現オブジェクトの split()メソッドは、マッチした文字のところで文字列を分割してリストで返します。次のサンプルコードでは、住所データを半角スペースのある所で分割します。

# reモジュールをインポート
import re

# 置換対象文字列
my_str = '大阪府 豊中市 刀根山元町 x-y-z 桃の木ハウス 105号'

# 半角スペースにマッチする正規表現オブジェクトを作成
regex = re.compile(r' ')

# 半角スペースを削除
s = regex.split(my_str)

print(s)
['大阪府', '豊中市', '刀根山元町', 'x-y-z', '桃の木ハウス', '105号']