Pythonで文字列を複数の区切り文字で分割(re.split)
目次
複数の区切り文字でsplit
Pythonの文字列にはsplit()
というメソッドがありますが、これを使うと文字列の分割は出来ます。
しかし複数の区切り文字で分割するということはできません。
複数の区切り文字で文字列を分割したい場合は、re
モジュールのsplit()
を使います。
re.split()
を使うと正規表現で区切り文字を指定することが可能です。
この記事ではre.split()
の使い方を解説します。
具体的には↓を見ていきます。
re.split()の構造
re.split()の使い方
普通のstr.split()との比較
re.split()の構造
re.split()
は↓のような構造をしています。
re.split(pattern, string, maxsplit=0, flags=0)
re.split()
は最大で4つの引数を取り、1つの返り値を返します。
pattern(第1引数)
第1引数には正規表現のパターンを指定します。
たとえばr'[+,-]'
やr'[:;]'
などがこれに当たります。
正規表現の詳細については↓をご覧ください。
string(第2引数)
第2引数には分割対象の文字列を指定します。
この文字列が第1引数のpattern
で分割されます。
maxsplit(第3引数)
第3引数には最大分割数を指定します。
この値が0
でなければ分割は最大maxsplit
回起こります。
残りの部分はリストの最後の要素に格納されます。
flags(第4引数)
第4引数のflags
については公式のドキュメントに説明の記載がありませんでした(2020/12/10現在)。
不明な引数です。
返り値
re.split()
の返り値はリストです。
分割された要素を格納したリストが返ります。
第3引数のstring
が空文字列の場合は、その空文字列を格納したリストが返ります。
つまり空文字列を分割した場合、返り値のリストは空ではありません。
re.split()の使い方
re.split()
を使うにはre
モジュールをインポートする必要があります。
import re
re.split()
は↓のように使います。
import re toks = re.split(r'[:;]', 'abc:def;ghi') print(toks)
↑のコードの出力は↓のようになります。
['abc', 'def', 'ghi']
↑の場合、「:
」と「;
」のいずれかの区切り文字列で「abc:def;ghi
」と言う文字列が分割されます。
この区切り文字列で文字列を分割した場合、分割された要素は合計でabc
, def
, ghi
の3つになります。
この3つの要素がリストに格納されてre.split()
の返り値として返ります。
単一の文字ではなく複数の文字の区切り文字で分割したい場合は↓のようにします。
import re toks = re.split(r'aaa|bbb', 'AAAaaaBBBbbbCCC') print(toks)
↑のコードの出力は↓のようになります。
['AAA', 'BBB', 'CCC']
普通のstr.split()との比較
str.split()
と比較してみます。
str.split()
は↓のように使います。
s = 'abc:def:ghi' toks = s.split(':') print(toks)
↑のコードの出力は↓のようになります。
['abc', 'def', 'ghi']
↓のように正規表現を指定したいところですが、
s = 'abc:def:ghi' toks = s.split(r'[:;]') print(toks)
↑の場合、↓のような出力になります。
['abc:def:ghi']
分割されてませんね。
このようにstr.split()
では複数の区切り文字を指定できません。
おわりに
今回はre.split()
の使い方を解説しました。
複数の区切り文字で文字列を分割したい場合はre.split()
を使いましょう。