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番目の要素にまとめて入っています。