Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで複数の区切り文字を使って文字列を分割する方法(re.splitの使い方)

問題

文字列をフィールドごとに分割したいけれど、区切り文字が文字列全体で統一されていない——そんな場面に直面することはありませんか?例えば、ハイフン(-)、カンマ(,)、空白などが混在したデータを扱う場合、単純な split() メソッドだけでは対応が難しくなります。

解決策

Pythonで複数の区切り文字を持つ文字列を分割する方法はいくつかあります。最も手軽なのは標準の split() メソッドですが、これは単純なケース向けの機能です。

re.split() は、通常の split() メソッドよりも柔軟に、複雑な文字列パターンに対応できます。

re.split() を使えば、区切り文字として複数のパターンを同時に指定できます。たとえば「ハイフン(-)」「空白」「カンマ(,)」などを1つの正規表現パターンとしてまとめて記述できます。正規表現の詳細については、Python公式ドキュメントの re モジュールの項目を参照してください。

指定したパターンが文字列内で見つかるたびに、そのマッチ全体が区切り文字として扱われ、その前後のテキストがフィールドとして分離されます。

区切り文字を除いてテキストのみを抽出する場合

まずは、区切り文字そのものを結果に含めず、テキスト部分だけを取り出す方法を見てみましょう。

コード例

import re
tennis_greats = 'Roger-federer, Rafael nadal, Novak Djokovic,Andy murray'
#-----------------------------------------------------------------------------
# シナリオ1:選手名のみを出力する
# 入力:複数の区切り文字( - , 空白 )を含む文字列
# 方法:[] の中に区切り文字を指定する
#-----------------------------------------------------------------------------
players = re.split(r'[-,\s]\s*', tennis_greats)

ポイントは正規表現の r'[-,\s]\s*' という部分です。[](文字クラス)の中に区切り文字候補を列挙し、\s* で余分な空白もまとめて処理しています。

実行と出力

print(f" The output is - {players}")

出力結果:

['Roger', 'federer', 'Rafael', 'nadal', 'Novak', 'Djokovic', 'Andy', 'murray']

このように、区切り文字は消え、選手名だけがリストとしてきれいに取得できました。

区切り文字も含めて抽出する場合

次に、分割されたテキストに加えて、どの区切り文字が使われていたかも一緒に取得したいケースです。

コード例

import re
tennis_greats = 'Roger-federer, Rafael nadal, Novak Djokovic,Andy murray'
#-----------------------------------------------------------------------------
# シナリオ2:選手名と区切り文字の両方を出力する
# 入力:複数の区切り文字( - , 空白 )を含む文字列
# 方法:パイプ(|)で区切り文字を囲んで指定する
#-----------------------------------------------------------------------------
players = re.split(r'(-|,|\s)\s*', tennis_greats)

ここでのポイントは、区切り文字のパターンを ()(キャプチャグループ)で囲んでいる点です。正規表現では、キャプチャグループに一致した部分は、区切り文字として削除されずに結果のリストに残ります。

実行と出力

print(f" The output is -{players}")

出力結果:

['Roger', '-', 'federer', ',', 'Rafael', ' ', 'nadal', ',', 'Novak', ' ', 'Djokovic', ',', 'Andy', ' ', 'murray']

このように、元の文字列でどの区切り文字(ハイフン、カンマ、空白)が使われていたかがそのままリストに含まれています。

まとめ

  • 単純な分割には標準の split() メソッドで十分ですが、複数の区切り文字が混在する場合は re.split() が有効です。
  • 区切り文字を結果から除外したい場合は、文字クラス [] を使います。
  • 区切り文字も結果に残したい場合は、パターンをキャプチャグループ () で囲みます。

正規表現を組み合わせることで、不規則なフォーマットの文字列でも柔軟に分割処理を行えます。ログ解析やCSV以外の形式のデータ処理など、実務でも役立つテクニックなので、ぜひ活用してみてください。

  1. PythonのBokehで画像を操作・表示する方法

    Pythonの可視化ライブラリBokehで画像を扱うには、image_url()メソッドを使い、画像URLのリストを渡すのが基本です。このメソッドを使うことで、ローカルやWeb上にある画像をプロット領域内に簡単に配置できます。実装の手順output_file()でデフォルトの出力先を設定し、show()を呼び出したときに結果がHTMLファイルとして保存されるようにします。figure()でプロット用の新しいFigure(図)オブジェクトを作成します。image_url()メソッドで、指定したURLから読み込んだ画像を描画します。show()を呼び出して、Bokehオブジェクトやアプリケーション

  2. Excelで複数の区切り記号を含むテキストを列に分割する方法6選

    テキストを列に変換する作業は、日々の業務で非常によく発生します。さまざまな場面でテキストを複数の列に分割する必要があり、その際に活躍するのがMicrosoft Excelです。本記事では、Excelで複数の区切り記号を使ってテキストを列に分割する方法について、詳細な手順を交えてわかりやすく解説します。 Excelで複数の区切り記号を使ってテキストを列に分割する6つの方法 今回は、セルB4:B13に入力されたベストセラーリストというデータセットを例に説明します。このデータには書籍名・著者名・ジャンルが1つのセルにまとめられており、それぞれを別々の列に分割することを目標とします。それでは、各方法を