ある文字列において、特定の文字がX文字以上連続した場合に限り、その連続した文字列で元の文字列を分割する

「ある文字列において、特定の文字がX文字以上連続した場合に限り、その連続した文字列で元の文字列を分割する」ことを考えた。
まずこれはどういうことか。具体例を示す。

例えば、何らかのテキストファイルを1行ずつ読み込んで処理をする場合に、特定の行が「不特定数の半角スペース区切りで複数の単語を列挙した行」である場合を考える。
具体的には「 列1 列2 列3 列4」といった場合である。
これを[列1,列2,列3, 列4]というようにsplitしたい時はどうするか。

最初は「半角スペース」で区切るだけなので、次のようにして解決かと考えた。

line.split()

しかし、これでは例えば「列1」という部分の文字列自体にに半角スペースが含まれていた場合にうまくいかない。
次のようなケースである。

line=   '   favorite fruits     favorite sports  '
line.split()

<class 'list'>: ['favorite', 'fruits', 'favorite', 'sports']

しかし、「意味を成す用語の場合は単語と単語の間は空白スペース1つで、2つ以上の空白スペースがある場合は用語の区切りと見なせる」場合、次のように対応できる。

import re

re.compile(r'\s{' + str(2) + ',}').sub('anything', line.strip()).split('anything')

<class 'list'>: ['favorite fruits', 'favorite sports']

ここで、'anything'の部分は一時的な文字列変換の結果であり、何でも良い。
この処理を解説すると次のような感じ。

line.strip() #両端の空白を削除

re.compile(r'\s{' + str(2) + ',}') #2文字連続する空白文字の正規表現。
#実は「re.compile(r'\s{2 ,}')」と書いているのと同じ。これは空白文字"\s"を{2,}で2回繰り返すことを表す正規表現だが、str(2)と書いているのは2の部分を変数化出来るようにするためである。

re.compile(r'\s{' + str(2) + ',}').sub('anything', line.strip())で、正規表現にマッチした部分を一旦'anything'という文字列に置換している。

最後に、いったん置換した'anything'という部分を区切り文字として、文字列を区切ってる。
re.compile(r'\s{' + str(continuous_char_number) + ',}').sub('anything', line.strip()).split('anything')