Python

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

この記事では、Pythonで文字列を分割する方法を解説します。取得した文字列をうまいこと分割することで、必要な部分のみを抜き出してデータ化したり、見やすく整形したりすることができます。それでは、文字列の分割方法を見ていきましょう❗️

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

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

str.split(sep=None, maxsplit=-1)
sep引数 区切り文字
maxsplit引数 最大分割回数

いずれの引数もデフォルト値が指定されているので省略可能。

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

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

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

s = 'A B  C'

print(s)

# 分割
print(s.split())

実行結果

A B  C
['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.rsplit()]

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 段落区切り

str.split()とは異なり、空白は分割されません。

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

print(s.splitlines())

実行結果

['あ い', 'う', 'え', 'お', 'か']

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

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']
【Python】正規表現の使い方この記事では、Pythonで正規表現を使う方法を解説します。世界にはいろんな数字や文字で溢れいていますが、文字のパターンによってそれが何...

最大分割回数

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

import re

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

print(re.split(',|/', s, 2))

実行結果

['A', 'B', 'C,D/E']

フラグ

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

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

import re

s = 'あaいBう'

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

実行結果

['あ', 'い', 'う']

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

まとめ

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

区切り文字で分割 str.split(sep=None, maxsplit=-1)
右から分割 str.rsplit(sep=None, maxsplit=-1)
改行で分割 str.splitlines([keepends])
正規表現で分割 re.split(pattern, string, maxsplit=0, flags=0)

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

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

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