今回は、Pythonのsplitで複数の区切り文字で分割する方法についてご紹介します。
Pythonのsplit()の基本
まず、Pythonの組み込み関数str.split()は、指定した1種類の区切り文字(または空白)に基づいて文字列を分割します。
例えば、カンマで区切りたい場合は以下のように記述できます。
1 2 3 |
text = "apple,banana,cherry" result = text.split(",") print(result) |
[‘apple’, ‘banana’, ‘cherry’]
このようにsplit()は便利ですが、複数の異なる区切り文字を同時に扱う機能がありません。
そこで登場するのが、正規表現を利用した方法や、文字を置換してからsplit()する方法です。
正規表現(re)を使って複数区切り文字を分割する
Pythonのre.split()を使うと、カンマやセミコロンなど、複数の区切り文字をまとめて指定できます。
例えば、カンマ,とセミコロン;を同時に区切り文字としたい場合は、以下のように書きます。
1 2 3 4 5 6 |
import re text = "apple,banana;cherry,dates;elderberry" # カンマまたはセミコロンのどちらかで分割 result = re.split('[,;]', text) print(result) |
[‘apple’, ‘banana’, ‘cherry’, ‘dates’, ‘elderberry’]
re.split()に正規表現パターンを渡すことで、指定した文字のいずれかで分割が可能になります。
また、区切り文字を含めて分割結果に残したい場合は、パターンを()で囲んでキャプチャグループを使います。
1 2 3 4 5 |
import re text = "apple,banana;cherry" result = re.split('([,;])', text) print(result) |
[‘apple’, ‘,’, ‘banana’, ‘;’, ‘cherry’]
このようにキャプチャグループを設定すると、区切り文字も分割結果に含まれるので、後の処理で区切り文字を参照したい場合に役立ちます。
さらに、区切り文字の前後に空白が入るケースでは、取得した要素に対してstrip()を適用すると不要な空白を取り除けます。
1 2 3 4 5 |
import re text = "apple, banana ; cherry | dates" parts = [part.strip() for part in re.split('[,;|]', text)] print(parts) |
[‘apple’, ‘banana’, ‘cherry’, ‘dates’]
このように空白もまとめて処理する場合は、リスト内包表記を用いるとスッキリ書けます。
str.replace()で単一の区切り文字にまとめる方法
複数の区切り文字を置換して1種類に統一し、それからstr.split()で分割する方法もあります。
例えば、カンマ,、セミコロン;、パイプ|を空白に置換したうえでsplit()する例は以下の通りです。
1 2 3 4 5 6 7 8 |
text = "apple,banana;cherry|dates" # 特定の区切り文字をスペースに置換 for delim in [",", ";", "|"]: text = text.replace(delim, " ") result = text.split() print(result) |
[‘apple’, ‘banana’, ‘cherry’, ‘dates’]
この方法はシンプルですが、置換する文字列が他の意味を持つ場合や、意図しない箇所が置換される恐れがある場合は注意が必要です。
よくあるエラーと注意点
複数の区切り文字を扱う際には、以下のような点に注意します。
- 正規表現の特殊文字を区切り文字にする場合、
\.
や\|
などのエスケープが必要 - 連続した区切り文字が含まれると、分割結果に空の文字列が入ることがあるので、必要に応じてフィルタリングを行う
- 一部の区切り文字が意図しない形でテキストに混在していると、想定外の分割結果になる可能性がある
- AttributeError:オブジェクトが文字列以外(Noneなど)になっていると
.split()
を呼べず、エラーになる - 性能:大量のデータを処理するときは、正規表現が速度に影響する可能性がある
これらを考慮しながら、取り扱う文字列や状況に最適な方法を選択することが大切です。
まとめ
Pythonのsplit()は単一の区切り文字の分割で便利ですが、複数区切り文字を扱いたい場合は正規表現や置換を活用します。
正規表現による分割は汎用性が高く、単一の区切り文字に置換する方法はコードがシンプルです。
用途やデータの形式に合わせて最適な手段を選び、分割結果に不要な空白や空文字列が含まれないよう注意しましょう。