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

Pythonで文字列を空白で分割する方法:split()と正規表現の使い方

Pythonでは、文字列を空白(スペース・タブ・改行など)で分割する場面がよくあります。ユーザー入力の解析やテキストデータの処理などがその代表例です。この記事では、空白で文字列を分割する代表的な2つの方法を、具体例とともにわかりやすく解説します。

方法1:split()メソッドを使う(おすすめ)

最もシンプルで一般的な方法は、文字列クラスに組み込まれた split() メソッドを使うことです。引数を指定しない場合、デフォルトの区切り文字として「空白文字」が使用され、連続した空白も自動的に適切に処理されます。

>>> "Please split this string".split()
['Please', 'split', 'this', 'string']

このように、元の文字列は単語ごとに分割されたリストになります。余分な空白が含まれていても、空の要素は生成されません。

>>> "Python   文字列   分割".split()
['Python', '文字列', '分割']

方法2:正規表現(re.split())を使う

より柔軟な制御が必要な場合は、標準ライブラリの re モジュールにある re.split() を利用できます。正規表現パターン \s+ を指定すると、「1個以上の連続した空白文字」を区切りとして分割できます。

>>> import re
>>> re.split(r'\s+', 'Please split this string')
['Please', 'split', 'this', 'string']

なお、正規表現エンジンの処理が挟まるため、単純な空白分割であれば split() メソッドの方が高速です。パフォーマンスが重要な場面ではこの点に注意しましょう。

使い分けのポイント

  • 単純に空白で分割したい場合: str.split() がベストです。高速でコードも簡潔になります。
  • タブや改行など特定の空白だけを区切りたい、複雑な条件で分割したい場合: re.split() の方が柔軟に対応できます。

補足:先頭・末尾の空白に注意

re.split(r'\s+', ...) を使う場合、文字列の先頭や末尾に空白があると、結果に空文字列が含まれることがあります。あらかじめ strip() で前後の空白を取り除いておくと安全です。

>>> re.split(r'\s+', '  hello world  ')
['', 'hello', 'world', '']
>>> re.split(r'\s+', '  hello world  '.strip())
['hello', 'world']

まとめ

Pythonで文字列を空白で分割するなら、split() メソッドが最も簡単かつ高速です。特殊な条件での分割が必要なときだけ re.split() を活用しましょう。日常的なテキスト処理では、まず split() を試すのがおすすめです。

  1. Pythonで文字列が空白文字のみかどうか判定する方法|isspace()と正規表現の使い方

    文字列が空白文字のみかどうかを判定する2つの方法 Pythonでは、文字列に空白文字(スペース、タブ、改行など)だけが含まれているかどうかを確認する方法が主に2つあります。1つ目は文字列メソッドの isspace() を使う方法、2つ目は標準ライブラリの re モジュールによる正規表現を使う方法です。 方法1:isspace() メソッドを使う isspace() は、文字列が空白文字のみで構成されており、かつ少なくとも1文字以上ある場合に True を返す便利なメソッドです。 s = \t\n print(s.isspace()) # True s = hello pri

  2. Pythonで文字列が英数字のみかどうかを判定する方法【isalnum()と正規表現】

    Pythonでは、文字列が英数字(アルファベットと数字)のみで構成されているかどうかを簡単に判定できます。主な方法は2つあります。文字列クラスに組み込まれている isalnum() メソッドを使う方法と、正規表現を使う方法です。 isalnum()メソッドを使う方法 Pythonの文字列クラスには isalnum() というメソッドが用意されています。このメソッドを文字列に対して呼び出すと、文字列が英数字のみで構成されている場合に True を、記号などが含まれる場合には False を返します。 >>> 123abc.isalnum() True >>>