この記事では、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']
改行で分割する[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) |
文字列を分割することでデータの解析や収集をすることができます。意外とよく使うので覚えておくと便利です。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ