Pythonで文字列を分割する4つの方法!(split)

Python Python

Pythonで文字列を分割する方法について書いています。
文字列を分割する場合には、下記のメソッドや演算子を使います。

・splitメソッド
・rsplitメソッド
・splitlinesメソッド
・re.splitメソッド

サンプルコードはPythonのバージョン3.10.5で動作を検証しています。

splitメソッドを使って分割する

splitメソッドを使って、文字列を分割する方法です。
splitメソッドは文字列から呼び出すことができます。公式のドキュメントはこちらにありました。

例えば、下記のように使用します。

fruits = "orange grape apple peach"
print(fruits.split()) # ['orange', 'grape', 'apple', 'peach']

programmingLanguages = "c,php,python,java,c#,javascript"
print(programmingLanguages.split(",")) # ['c', 'php', 'python', 'java', 'c#', 'javascript']

fruits変数に分割対象の文字列「orange grape apple peach」を代入しました。
次の行でsplitメソッドを使って、分割し、print関数で出力してみています。

fruits.split()引数を渡さずに呼ぶことで、半角または全角スペースの箇所を元にして、文字列を分割します。
分割された結果は、リスト型になって返ってきます。
出力した結果は「['orange', 'grape', 'apple', 'peach']」になりました。

次に、カンマを区切り文字に指定して、分割しています。
programmingLanguages変数に文字列「c,php,python,java,c#,javascript」を代入しました。
次の行でsplitメソッドを使っていますが、今回はカンマ(‘,’)を引数として渡しています。

こうして、引数に区切り文字を渡すと、渡した区切り文字を元に文字列を分割します。
結果、ここでの出力は「['c', 'php', 'python', 'java', 'c#', 'javascript']」になります。

分割回数を指定する

splitメソッドでは、第2引数を使うことで、分割する回数を指定することもできます。
先ほどの例を、分割回数を指定して実行してみます。

programmingLanguages = "c,php,python,java,c#,javascript"
print(programmingLanguages.split(",", 3)) # ['c', 'php', 'python', 'java,c#,javascript']

programmingLanguages変数に、先ほどと同じようにカンマ区切りの文字列を代入しています。
次の行でsplitメソッドを呼んでいます。
第1引数に区切り文字を指定して、第2引数に分割回数を指定しました。

そうすると、出力結果のリストとして「['c', 'php', 'python', 'java,c#,javascript']」が返ってきました。
最初の3つだけ分割されて、残りは分割されずにリストの末尾に残っていることが確認できました。

splitメソッドのまとめ

splitメソッドの挙動を簡単にまとめます。

第1引数

第1引数はリストを区切るための文字を渡します。
引数を渡さなかった場合やNoneが渡されたときには、半角または全角スペースが区切り文字として使われます。
連続したスペースは、ひとつの区切り文字として扱われます。

fruits = "orange  grape apple      peach"
print(fruits.split()) # ['orange', 'grape', 'apple', 'peach']

引数を渡した場合には、渡した文字が区切り文字として使われます。

第2引数

第2引数は分割する回数でした。
渡した数値の数で分割してくれます。
デフォルトでは回数無制限です。

戻り値

文字列を区切ったリストが返ってきます。

rsplitメソッドを使って分割する

rsplitメソッドでも文字列を分割できます。
splitメソッドとrsplitメソッドの違いは、rsplitメソッドは右から分割していく所だけです。
そのほかの動作はsplitメソッドと同様になります。

例えば、下記のように使います。

fruits = "orange grape apple peach"
print(fruits.rsplit()) # ['orange', 'grape', 'apple', 'peach']

programmingLanguages = "c,php,python,java,c#,javascript"
print(programmingLanguages.rsplit(",", 3))# ['c,php,python', 'java', 'c#', 'javascript']

fruits変数に文字列「orange grape apple peach」を入れています。
次の行で、rsplitメソッドを使って、文字列を分割してリストにしています。
区切り文字を指定していないので、半角スペースで分割されて、結果「['orange', 'grape', 'apple', 'peach']」が出力されます。

これは、splitメソッドの時の挙動と変わりません。
次の処理で、分割回数を指定して処理していますが、分割回数を指定した場合に違いが出てきます。

programmingLanguages変数に、文字列「c,php,python,java,c#,javascript」を入れています。
その後に、文字列からrsplitメソッドを呼んでいます。
第1引数にカンマ(‘,’)を指定して、文字列のカンマを元にして文字列をリストに分割しています。
第2引数に分割回数「3」を指定しました。これで3回だけ分割されます。

rsplitメソッドを使っているため、右から分割されて、出力結果が「['c,php,python', 'java', 'c#', 'javascript']」なります。
これが、splitメソッドだった場合は「['c', 'php', 'python', 'java,c#,javascript']」になります。
文字列の「先頭から分割するか、末尾から分割するか」が、違いになります。

splitlinesメソッドを使って分割する

splitlinesメソッドを使うと、改行コードの箇所を元にして、文字列を分割することができます。
splitlinesメソッドも文字列から呼び出して使います。

例えば、下記のように使います。

fruits = '''peach
orange
grape
apple
banana
'''
print(fruits.splitlines()) # ['peach', 'orange', 'grape', 'apple', 'banana']

colors = 'red\nblue\r\ngreen\ryellow'
print(colors.splitlines()) # ['red', 'blue', 'green', 'yellow']

fruits変数には、果物名を改行した内容の文字列が入っています。
次の行で、splitlinesメソッドをfruits変数から呼び出しています。

print関数で出力すると、結果は「['peach', 'orange', 'grape', 'apple', 'banana']」となっています。
文字列の改行位置を元にして、文字列を分割してリストになっていることが確認できました。

改行コードを明示的に入力している場合でも分割されます。
colors変数には、改行コードを含めた文字列の「'red\nblue\r\ngreen\ryellow'」を代入しています。

print関数で出力すると、結果は「['red', 'blue', 'green', 'yellow']」となりました。
CR(\r)・LF(\n)・CRLF(\r\n)のそれぞれの改行コードを入力している箇所で、分割されてリストになっていることが確認できました。

re.splitメソッドを使って分割する

reモジュールのsplitメソッドを使うと、正規表現でマッチした箇所を元に分割します。
例えば、下記のように使います。

import re

text = 'apple100banana222orange333'
result = re.split(r'[0-9]+', text)
print(result) # ['apple', 'banana', 'orange', '']

最初にimport文を使って、reモジュールを読み込んでいます。
次にtext変数に文字列「apple100banana222orange333」を入力しています。

次の行で、re.splitを使っています。
第1引数に正規表現を渡して、第2引数に分割する文字列を入れています。

正規表現は「[0-9]+」としているので、数値が続いている箇所にマッチします。
文字列の中の数値が続く箇所を元に、文字列を分割します。

結果、数値の箇所で分割されて「['apple', 'banana', 'orange', '']」になりました。

コメント

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