Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
re.sub() / re.split() / re.compile()
正規表現を使った文字列の置換・分割・パターンのコンパイルを行う関数です。テキスト加工やパーサー処理でよく使います。
構文
import re # パターンに一致した部分を置換します。 新文字列 = re.sub(パターン, 置換文字列, 文字列) 新文字列, 件数 = re.subn(パターン, 置換文字列, 文字列) # パターンで文字列を分割します。 リスト = re.split(パターン, 文字列) # パターンをコンパイルして再利用します。 pattern = re.compile(パターン) pattern.search(文字列) pattern.findall(文字列)
関数一覧
| 関数 | 概要 |
|---|---|
| re.sub(pattern, repl, string, count=0) | 文字列中でパターンに一致した部分を置換文字列に置き換えます。『count』で最大置換回数を指定できます。置換した新しい文字列を返します。 |
| re.subn(pattern, repl, string) | 『re.sub()』と同じですが、戻り値が『(置換後文字列, 置換件数)』のタプルになります。 |
| re.split(pattern, string, maxsplit=0) | パターンに一致した箇所で文字列を分割し、リストで返します。キャプチャグループがあるとセパレータも含めて返します。 |
| re.compile(pattern, flags=0) | 正規表現パターンをコンパイルして再利用可能なオブジェクトを返します。同じパターンを繰り返し使う場合に効率的です。 |
サンプルコード
import re
# sub() で置換します。
text = 'Hello World hello python'
result = re.sub(r'hello', 'Hi', text, flags=re.IGNORECASE)
print(result) # 『Hi World Hi python』と出力されます。
# 連続した空白を1つにまとめます。
messy = 'これは テスト です。'
clean = re.sub(r'\s+', ' ', messy)
print(clean) # 『これは テスト です。』と出力されます。
# キャプチャグループを置換文字列に利用します(\1 で参照)。
date = '2025/04/15'
iso = re.sub(r'(\d{4})/(\d{2})/(\d{2})', r'\1-\2-\3', date)
print(iso) # 『2025-04-15』と出力されます。
# subn() で置換件数も取得します。
new_text, count = re.subn(r'\d+', 'N', '商品1と商品2と商品3')
print(new_text) # 『商品Nと商品Nと商品N』と出力されます。
print(f'{count}件置換しました。') # 『3件置換しました。』と出力されます。
# split() で正規表現パターンで分割します。
csv_like = '田中,佐藤、鈴木 山田' # 区切り文字が混在しています。
names = re.split(r'[,、\s]+', csv_like)
print(names) # 『['田中', '佐藤', '鈴木', '山田']』と出力されます。
# compile() でパターンを再利用します。
email_pattern = re.compile(r'[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}')
emails = [
'user@example.com',
'not-an-email',
'info@test.co.jp',
]
for e in emails:
if email_pattern.fullmatch(e):
print(f'{e} は有効です。')
else:
print(f'{e} は無効です。')
概要
『re.sub()』の置換文字列にはキャプチャグループの参照(『\1』、『\2』など)を使えます。また置換文字列の代わりに関数を渡すと、マッチごとに動的に置換文字列を生成することもできます。
『re.split()』はキャプチャグループを含むパターンで分割すると、セパレータに一致した文字列もリストに含まれます。セパレータを含めたくない場合は非キャプチャグループ(『(?:...)』)を使ってください。
『re.compile()』は同じパターンを繰り返し使う場合にパフォーマンスが向上します。ただしPython内部でもある程度キャッシュが効くため、数回程度の使用ではコンパイルの効果はほとんどありません。ループ内で大量に使う場合に特に有効です。
パターンのマッチングは『re.match() / re.search() / re.fullmatch()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。