PyQサポートのkamekoです。今日は、文字列を正規表現パターンで分割するre.split
について、
str.splitとの違いを具体例で比べながら解説します。
質問
正規表現で駅弁一覧データを処理しよう の2問目で、re.splitと、str.splitの違いについて解説で、 前者の方が「正規表現パターンで文字列を分解できるところ」が後者より強力なポイントだと説明されていますが、 この正規表現パターンで文字列を分解できるということがいまいちピンと来ないので、 簡単な例などあれば教えていただけますでしょうか?
回答:str.split
とre.split
の解説
まず、str.splitは特定の文字列で文字列を分割できます。
公式ドキュメント:str.split
https://docs.python.org/ja/3/library/stdtypes.html#str.split
re.splitは正規表現で文字列を分割できます。
公式ドキュメント:re.split
https://docs.python.org/ja/3/library/re.html#re.split
.splitの解説記事
.splitについては、以前PyQでも、以下の記事で解説しています。 blog.pyq.jp
re.splitが役立つ具体例
正規表現パターンで文字列を分割できるのが有利なサンプルを紹介します。
「aaa1bbb12ccc123ddd」という、文字列と数字が交互に並んでいる文字列から、 aaa, bbb, ccc, dddという英字だけの文字列を抜き出したいときなどに、 re.splitは役に立ちます。
str.splitを用いて特定の文字で分割
result_str = sample.split('1') print(result_str)
結果
['aaa', 'bbb', '2ccc', '23ddd']
str.splitは特定の文字列で分割するので、「1」などの一文字で分割すると、結果のように英字以外の文字列が紛れてしまいます。
['aaa', 'bbb', 'ccc', 'ddd']
というリストが欲しい場合はこの後何かしらの処理が必要になりますね。
この時に、re.splitを使うと、数字で分割することができます。
re.splitを用いて数字で分割
result_re = re.split('\d+', sample) print(result_re)
結果
['aaa', 'bbb', 'ccc', 'ddd']
\d
が0から9の数字のどれかを表しており、 \d+
は1文字以上の連続した数字を表します。これを利用して任意の連続した数字で文字列を分割し、数字以外の部分を取得できます。
まとめ
re.splitを使うことで、分割に用いる文字列が異なっていても、一定のパターンであれば、文字列を分割できます。