1. ホーム
  2. python

[解決済み] 正規表現に基づく文字列の分割

2022-03-10 08:43:55

質問

あるコマンドの出力を表形式で持っています。この出力を結果ファイルからパースして、文字列に格納しています。1行の各要素は1つ以上の空白文字で区切られているため、正規表現を使って1つ以上の空白文字にマッチさせて分割しています。しかし、すべての要素の間にスペースが挿入されています。

>>> str1="a    b     c      d" # spaces are irregular
>>> str1
'a    b     c      d'
>>> str2=re.split("( )+", str1)
>>> str2
['a', ' ', 'b', ' ', 'c', ' ', 'd'] # 1 space element between!!!

何か良い方法はないでしょうか?

各分割後 str2 がリストに追加されます。

解決方法は?

を使用することで ( , ) の場合、グループをキャプチャしているので、それらを削除すれば、この問題は発生しません。

>>> str1 = "a    b     c      d"
>>> re.split(" +", str1)
['a', 'b', 'c', 'd']

ただし、正規表現は必要ありません。 str.split デリミタを指定しない場合、空白で分割されます。この場合、これが一番良い方法でしょう。

>>> str1.split()
['a', 'b', 'c', 'd']

もし、本当に正規表現が必要な場合は、次のようにします ( '\s' は空白を表すので、より明確です)。

>>> re.split("\s+", str1)
['a', 'b', 'c', 'd']

あるいは、空白文字以外のすべての文字を検索することもできます。

>>> re.findall(r'\S+',str1)
['a', 'b', 'c', 'd']