regex.sub, regex.split

regex.sub, regex.split

regex.sub()

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

# PYTHON_REGEX_SUB

# In[1]

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年」の両方にマッチする正規表現です。

# In[2]

# 検索対象文字列
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()

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

# PYTHON_REGEX_SUBN

# In[1]

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()

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

# PYTHON_REGEX_SPLIT

# In[1]

import re

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

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

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

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