Python

【Python】文字列を分割する方法

この記事では、Pythonで文字列を分割する方法を解説します。

取得した文字列をうまいこと分割することで、必要な部分のみを抜き出してデータ化したり、整形したりすることができます。

それでは、文字列の分割方法を見ていきましょう!

区切り文字で分割する[str.split()]

1パターンの区切り文字で分割する場合は、str型のsplit()メソッドを使います。

書式

str.split(sep=None, maxsplit=-1)

sepには区切り文字、maxsplitには最大分割回数を指定します。いずれの引数もデフォルト値が指定されているので省略可能です。

分割した文字列は「リスト」で返されます

空白文字と特定のエスケープシーケンスで分割

sepを省略する、またはsepNoneを指定することで、空白文字と特定のエスケープシーケンスで分割します。連続した空白文字は1つの文字として分割されます。

s = 'A B  C'

print(s)
>> A B  C

# 分割
print(s.split())
>> ['A', 'B', 'C']

以下のエスケープシーケンスは、分割されてしまうので注意しましょう❗️

分割されるエスケープシーケンス
\f ASCII フォームフィード (FF)
\n ASCII 行送り (LF)
\r ASCII 復帰 (CR)
\t ASCII 水平タブ (TAB)
\v ASCII 垂直タブ (VT)
s = 'あ\fい\nう\rえ\tお\vか'

print(s)
>> あ
>>   い
>> え      お
>>           か

print(s.split())
>> ['あ', 'い', 'う', 'え', 'お', 'か']

区切り文字の指定

sepに文字を指定することで、区切り文字を指定することができます。

s = 'A,B,C'

# ,(カンマ)で区切る
print(s.split(','))
>> ['A', 'B', 'C']

sepには文字だけでなく、文字列を指定することもできます。

s = 'A()B()C'

print(s.split('()'))
>> ['A', 'B', 'C']

最大分割回数の指定

maxsplitに整数を指定することで、最大分割回数を指定できます。

s = 'A,B,C'

# 1回のみ分割
print(s.split(',', 1))
>> ['A', 'B,C']

区切り文字で右から分割[str.split()]

str型のrsplit()メソッドは、先ほどのsplit()メソッドの右から分割するバージョンです。使い方は変わりません。

str.rsplit(sep=None, maxsplit=-1)

最大分割回数を指定した際の結果のみ異なります。

s = 'A,B,C'

print(s.rsplit(',', 1))
>> ['A,B', 'C']
rsplitメソッドは右から分割しますが、戻り値のリストの順番は変わりません

改行で分割[str.splitlines]

改行で分割したい場合は、str型のsplitlines()メソッドを使います。

str.splitlines([keepends])

以下のエスケープシーケンスなどの改行も分割されます。

\n 改行
\r 復帰
\r\n 改行 + 復帰
\v or \x0b 垂直タブ
\f or \x0c 改ページ
\x1c ファイル区切り
\x1d グループ区切り
\x1e レコード区切り
\x85 改行 (C1 制御コード)
\u2028 行区切り
\u2029 段落区切り
空白は分割されない
s = 'あ い\nう\r\nえ\x1cお\u2028か'

print(s.splitlines())
>> ['あ い', 'う', 'え', 'お', 'か']

keependsTrueにすることで、分割した文字の末尾に改行を残すことができます。

s = 'あ い\nう\r\nえ\x1cお\u2028か'

print(s.splitlines(True))
>> ['あ い\n', 'う\r\n', 'え\x1c', 'お\u2028', 'か']

正規表現で分割[re.split()]

正規表現で分割したい場合は、reモジュールのsplit()関数を使います。reモジュールは、標準ライブラリなので追加でインストールする必要はありません。

書式

re.split(pattern, string, maxsplit=0, flags=0)

patternに正規表現パターン、stringに分割したい文字列、maxsplitに最大分割回数、flagsにフラグ(後述)を指定します。

カンマとスラッシュで分割

試しに,(カンマ)/(スラッシュ)で分割してみます。

import re

s = 'A,B/C,D/E'

# ,と/で分割する
print(re.split(',|/', s))
>> ['A', 'B', 'C', 'D', 'E']

最大分割回数

maxsplitを指定することで、最大分割回数を指定することができます。

import re

s = 'A,B/C,D/E'

print(re.split(',|/', s, 2))
>> ['A', 'B', 'C,D/E']

フラグ

フラグを指定することで、色々な効果を得ることができます。

以下のコードでは、a~cまでの小文字のアルファベットで分割していますが、flagsre.IGNORECASEを指定することで、大文字・小文字の区別をしないマッチングをするように設定しました。

import re

s = 'あaいBう'

print(re.split('[a-c]', s, flags=re.IGNORECASE))
>> ['あ', 'い', 'う']

参考re—正規表現操作 正規表現のシンタックス—Python 3.9.0 ドキュメント

まとめ

この記事では、Pythonで文字列を分割する方法を解説しました。

今回のおさらい
  • 区切り文字で分割 = str.split(sep, maxsplit)
  • 区切り文字で右から分割 = str.rsplit(sep, maxsplit)
  • 改行で分割 = str.splitlines(keepends)
  • 正規表現で分割 = re.split(pattern, string, maxsplit, flags)

文字列を分割することで、データの解析や収集をすることができます。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』