2

私は今、この正規表現であまりにも長い間戦っています。分割では区切り文字として空白を使用する必要がありますが、次のトークンまで空白シーケンスで残りのものを維持する必要があります

'123 45   678    123.0'
=>
'123', '45', '  678', '   123.0'

私の番号もフロートであり、グループ数は不明です。

4

1 に答える 1

2

後読みアサーションの使用についてはどうですか?:

>>> import re
>>> regex = re.compile(r'(?<=[^\s])\s')
>>> regex.split('this  is a   string')
['this', ' is', 'a', '  string']

正規表現の内訳:

(?<=...)  #lookbehind.  Only match if the `...` matches before hand
[^\s]     #Anything that isn't whitespace
\s        #single whitespace character

英語では、これは「空白文字が前にない場合、単一の空白文字に一致する」と解釈されます。

または、否定の後読みアサーションを使用できます。

regex = re.compile(r'(?<!\s)\s')

(コメントで示唆されているように)少し良いかもしれませんし、上記と非常に似ているため、どのように機能するかを比較的簡単に理解できるはずです。

于 2012-11-23T15:44:07.090 に答える