Python
基本データ型
文字列
分割

Pythonで文字列を分割: split(), splitlines(), 正規表現, 区切り文字, 改行

プログラミング、特にテキストベースのデータを扱うときに最も一般的な作業のひとつが文字列の切り捨てです。 Pythonは、文字列を扱うことに関しては、ほとんどすべてのプログラミング言語の中で最も簡単で、最も強力で、最も直感的です。

文字列の切り捨てについても同じことが言えます。Pythonには文字列を切り捨てるための組み込みメソッドや関数が数多く用意されています。

この記事では、Pythonで文字列を扱う方法を、文字列の切り捨てと操作のための様々なテクニックと、それらの使用例を通してまとめます。

1. list() メソッドで各文字を切り捨ててリストを作成する

Python では、文字列は一重引用符または二重引用符で囲まれた文字の並びです。 文字列は不変であり、一度宣言されると内容を変更することはできません。 Python には文字列を扱うための基本的な組み込みメソッドがいくつかあります。 ここでは文字列を分割する方法を取り上げます。

まず、list() メソッドを使って、スペースを含む文字列のすべての文字を配列に分割します。

text = "Python is great language!"
text_list = list(text)
# Output: ['P', 'y', 't', 'h', 'o', 'n', ' ', 'i', 's', ' ', 'g', 'r', 'e', 'a', 't', ' ', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '!']
 
# 空白のないリストを作りたければ、まずreplace()メソッドで空白を削除し、それからlist()メソッドを呼び出す。
 
text_list = list(text.replace(' ', ''))
# Output:  ['P', 'y', 't', 'h', 'o', 'n', 'i', 's', 'g', 'r', 'e', 'a', 't', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '!']

2. split() メソッドによる文字列の分割

split()メソッドは、Pythonで文字列を分割する最も一般的で簡単な方法です。 これは基本的に空白に基づいて文字列を分割し、部分文字列のリストを返します。

split()を使った例。

text = "Python is great language!"
words = text.split()
 
print(words)

例を実行した結果は以下の通り。

['Python', 'is', 'great', 'language!']

split()メソッドの引数として、文字列を分割したい基点となる文字を渡すこともできます。

text = "Python-is-great-language!"
words = text.split("-")
 
print(words)

例を実行した結果は以下の通り。

['Python', 'is', 'great', 'language!']

split() メソッドには maxsplit パラメータがあります。 maxsplit パラメータは、文字列を分割できる最大回数を指定します。 文字列が先頭から最大回数分割された後、残りの文字列が最後の要素として返されます。

text = "Python is great language! It's easy-to-use."
words = text.split(" ", maxsplit=2)
 
print(words)

例を実行した結果は以下の通り。

['Python', 'is', "great language! It's easy-to-use."]

3. splitlines() メソッドによる改行位置での行分割

複数行の文字列を扱うときは splitlines() メソッドを使います。 splitlines()メソッドは複数行の文字列を行ごとに分割し、各レコードのリストを返します。 デフォルトでは、このメソッドは改行文字 (\n) で文字列を分割する。

splitlines()メソッドの使用例:

multiline_text = "Python is great language!\nIt's easy-to-use.\nJust try it today!"
lines = multiline_text.splitlines()
 
print(lines)

例を実行した結果は以下の通り。

['Python is great language!', "It's easy-to-use.", 'Just try it today!']

splitlines()メソッドはオプションで keepends パラメータを取ることもできます、 このパラメータを True に設定すると、返されるリストの各行の末尾に改行文字 (\n) を保持します:

multiline_text = "Python is great language!\nIt's easy-to-use.\nJust try it today!"
lines = multiline_text.splitlines(keepends=True)
 
print(lines)

例を実行した結果は以下の通り。

['Python is great language!\n', "It's easy-to-use.\n", 'Just try it today!']

4. re.split() 正規表現を使用した、複数の区切り文字を含む文字列の分割

場合によっては、複数の区切り文字やパターンに基づいて文字列を分割するために、より高度な分割関数が必要になるかもしれません。 Pythonの re モジュールは、正規表現を使って文字列を分割できる強力な split() 関数を提供しています。

ここでは、複数の区切り文字を使用して文字列を分割する例を示します:

import re
 
text = "Python is;great:language! It's,easy-to-use."
words = re.split(r"[;:,\s]\s*", text)
 
print(words)

例を実行した結果は以下の通り。

['Python', 'is', 'great', 'language!', "It's", 'easy-to-use.']

上記の例で使用されている正規表現パターンは r"[;:,¬s*" です。 r"[;:,˶s]˶s*"の意味は、セミコロン(;)、コロン(:)、カンマ(,)、スペース(ss)で始まり、0個以上のスペース(ss*)が続くパターンをすべて見つけることです。 re.split()関数はこのパターンが発生するたびに文字列を分割します。

re.split()を使用するもう1つの方法は、特定の区切り文字ではなくパターンに基づいて文字列を分割することです:

import re
 
text = "Python is;great:language!1234It's,easy-to-use."
words = re.split(r"\d+", text)
 
print(words)

例を実行した結果は以下の通り。

['Python is;great:language!', "It's,easy-to-use."]

上記の例では、正規表現パターン(r"\d+")は1つ以上の数字にマッチすることを意味します。 関数 re.split() はこのパターンが出現するたびに文字列を分割します。

5. Pythonで文字列を分割するベストプラクティス

  • 単純な文字列の分割には、Pythonの組み込みの split() メソッドを使います。 split()メソッドは効率的で、ほとんどの文字列分割タスクに使いやすいです。 特に、単一の区切り文字に基づいて文字列を分割する場合は、これが最適なソリューションです。
  • 複数行の文字列を分割するには splitlines() メソッドを使用します。 splitlines()メソッドは、複数行の文字列を行ごとに分割し、その行を要素とするリストを返す最も効率的で便利な方法です。
  • より高度な分割を行うには、 re.split() で正規表現を使用します。 複数の区切り文字やパターン、複雑なルールに基づいて文字列を分割する必要がある場合、 re モジュールの re.split() 関数は強力で柔軟な分割機能を提供します。
  • しかし、正規表現は強力な反面、組み込みのメソッドよりも遅い場合があります。可能な限り組み込みのメソッドを使用し、必要な場合にのみ正規表現を使用することをお勧めします。

6. まとめ

この記事では Python の組み込みメソッドである split()splitlines() について説明しました。 そして re モジュールの re.split() 関数について説明しました、 Pythonで文字列を分割するテクニックをいくつか見てきました。 これらのテクニックを理解し使いこなすことで、Pythonでテキストベースのデータを効率的に操作・処理できるようになります。

単純なテキスト処理から複雑なデータの抽出や変換まで、これらの強力な文字列操作ツールを自由に使うことができます、 この記事が様々なタスクの処理に役立つことを願っています。

copyright for Python string split

© 2023 All rights reserved.