🐍 Python
re.split(pattern, string, maxsplit=0, flags=0)
パターンに一致する箇所を区切りとして、文字列を分割する関数です。str.split()は固定の1文字(または1つの文字列)でしか分割できませんが、re.splitはパターンで分割できるため、「カンマまたはセミコロン、その後の空白は0個以上」のような複数パターンの区切り文字を一度に扱えます。
構文: re.split(pattern, string, maxsplit=0, flags=0)
戻り値: 分割された文字列のリスト
基本の使い方:複数の区切り文字で分割する
カンマとセミコロンのどちらでも区切れて、区切り文字の後の空白も一緒に取り除きます。
import re
print(re.split(r'[,;]\s*', 'a, b;c, d'))
# ['a', 'b', 'c', 'd']
maxsplitで分割回数を制限する
maxsplitに数値を指定すると、その回数だけ分割し、残りは1つの要素としてまとめて返します。「先頭の1単語だけ取り出して、残り全部は別扱いにしたい」ときに便利です。
import re
print(re.split(r'\s+', 'one two three', maxsplit=1))
# ['one', 'two three'](1回だけ分割し、残りは1つにまとまる)
グループを含めると区切り文字自体が結果に残る
ここがre.splitで最も見落としやすいポイントです。パターンを(...)で囲むと、区切りに使った文字列自体もリストの要素として結果に含まれるようになります。
import re
print(re.split(r'\s+', 'one two'))
# ['one', 'two'](グループなし: 区切り文字は結果に含まれない)
print(re.split(r'(\s+)', 'one two'))
# ['one', ' ', 'two'](グループあり: 区切りに使った空白文字自体も結果に残る)
パラメータ
- pattern
- 区切りとして使う正規表現パターン(文字列)。raw文字列
r'...'で書くのが基本 - string
- 分割対象の文字列
- maxsplit(省略可)
- 分割する最大回数。0(既定)なら制限なく全て分割
- flags(省略可)
- 動作オプション。詳しくはflagsのページを参照
💡 意図せず区切り文字が結果に混ざる事故
AIが生成したコードで、パターンにグループ(...)を使いながら「区切り文字は結果に含まれない」前提でループ処理を書いていると、実際には区切り文字自身も要素としてリストに混ざり、想定と違う件数・内容になってしまいます。re.splitにグループ入りのパターンを渡しているコードを見たら、その結果に区切り文字が混ざる可能性を疑ってください。区切り文字を結果に含めたくない場合は、グループを使わない(または非捕捉グループ(?:...)を使う)のが安全です。