ユーニックス総合研究所

  • home
  • archives
  • python-re-split

Pythonで文字列を複数の区切り文字で分割(re.split)

  • 作成日: 2021-01-18
  • 更新日: 2023-12-24
  • カテゴリ: Python

複数の区切り文字で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()を使いましょう。

参考