Categories: 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.split()は、区切りたい文字が明確に決まっている際に使います。

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

str型のrsplit()メソッドは、先ほどのsplit()メソッドとは異なり右から分割していきます。基本的な使い方は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']

正規表現の使い方

最大分割回数

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)

文字列を分割することでデータの解析や収集をすることができます。意外とよく使うので覚えておくと便利です。

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago