【Python】文字列を分割する方法【split関数の使い方】

Python

この記事では、Pythonで文字列を分割する方法を解説します。文字列を分割することで必要な部分のみを抜き出し、データ化することができます。

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

1種類の区切り文字で分割する場合は、str型のsplitメソッドを使います。

引数を省略することで、空白文字やいくつかのエスケープシーケンスで分割されます。空白文字が連続している場合も、まとめて処理されます。

分割されるエスケープシーケンス

\n\t\v\f\r

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

s = 'A B  C\nD\vE'

print(s)

print(s.split())

実行結果

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

複数行の文字列を使用した場合は、改行で分割されます。

s = '''A
B
C'''

print(s)

print(s.split())

実行結果

A
B
C
['A', 'B', 'C']

区切り文字を指定する

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

s = 'A,B,C'

print(s.split(','))

実行結果

['A', 'B', 'C']

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

s = 'A()B()C'

print(s.split('()'))

実行結果

['A', 'B', 'C']

最大分割回数を指定する

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

s = 'A,B,C'

print(s.split(',', 1))

実行結果

['A', 'B,C']

区切り文字で右から分割[rsplit()]

str型のrsplitメソッドは、先ほどのsplitメソッドの右から分割するバージョンです。使い方はsplitメソッドと同じですが、最大分割回数を指定した際の結果が異なります。

s = 'A,B,C'

print(s.rsplit(',', 1))

実行結果

['A,B', 'C']
POINT

rsplitメソッドは右から区切りますが、リストに代入される順番はsplitメソッドと変わっていないことに注意しましょう!

改行で分割[splitlines]

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

改行のみの分割ならば、splitメソッドやrsplitメソッドを使うよりも、splitlinesメソッドを使った方が安全に分割することができます。

s = 'A B\nC\r\nD\n'

# 空白文字まで分割してしまう
print(s.split())

# 複数の改行文字に対応できない
# 末尾の改行も分割してしまう
print(s.split('\n'))

print(s.splitlines())

実行結果

['A', 'B', 'C', 'D']
['A B', 'C\r', 'D', '']
['A B', 'C', 'D']

末尾に改行を付ける

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

s = 'A B\nC\r\nD\n'

print(s.splitlines(True))

実行結果

['A B\n', 'C\r\n', 'D\n']

正規表現で分割

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

re.split関数は、第一引数に正規表現パターン、第二引数に分割したい文字列を指定します。

import re

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

# ,と/で分割する
print(re.split(',|/', s))

実行結果

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

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

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

import re

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

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

実行結果

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

まとめ

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

今回のおさらい

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

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

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

タイトルとURLをコピーしました