Python: 正規表現で文字列を分割する re.split()

Pythonで正規表現による文字列の分割処理を行う場合は、 reモジュールの split() 関数を使います。

正規表現を使わない文字列分割はstrオブジェクトのsplit()メソッドを使いますが、 正規表現を使った分割の場合はreモジュールのsplit()関数を使います。

ここではreモジュールのsplit()関数について解説します。

re.split()関数の書式

書式
split(検索パターン, 検索対象文字列, maxsplit=0, flags=0)

戻り値は検索パターンによって分割された文字列のリストです。 パターンマッチしない場合は、 要素数1つのリストとして検索対象文字列がそのまま返って来ます。
maxsplitとflagsは省略可能で、maxsplitは最大分割数です。

サンプルコード

次のコードは改行コードで文字列を分割します。
「\r\n」「\n」のどちらにも対応できるようにパターンを「\r?\n」としています。

import re

# パターン
p = "\r?\n"

s = "ab\ncd\r\nef\r\ngh\nij"

# 正規表現で分割
li = re.split(p, s)

print(li)

改行で分割された文字がリストとして取得できています。

実行結果
['ab', 'cd', 'ef', 'gh', 'ij']

上のコードでは re.split()関数のサンプルとして文字列を改行コードで分割していますが、 実際に文字列を改行コードで分割する場合はstrオブジェクトの splitlines()メソッドを使う方が現実的です。
(関連記事: 文字列を改行で分割する splitlines()

maxsplitを指定した場合

今度は maxsplit(最大分割数)を指定してみます。

import re

# パターン
p = "\r?\n"

s = "ab\ncd\r\nef\r\ngh\nij"

li = re.split(p, s, maxsplit=2)

print(li)
実行結果
['ab', 'cd', 'ef\r\ngh\nij']

「maxsplit=2」を指定した場合は、 最初の2つの要素にパターンで分割された文字列が入り、 残りの文字列は3番目の要素にまとめて入っています。

Python