...値は 1 つ以上のスペースまたはタブ文字で区切られることに注意してください
この場合のように、異なるタイプの区切り文字が複数ある場合、split() メソッドを使用するにはどうすればよいですか?
セパレーターを 1 つだけではなく、正規表現を使用して分割します。
異なる空白文字で区切られたいくつかの文字列で同じ問題が発生し、正規表現ライブラリ仕様に示されているように\sを使用しました。
\s は任意の空白文字に一致します。これはセット [ \t\n\r\f\v] と同等です。
reを正規表現ハンドラーとしてインポートする必要があります。
import re
line = "something separated\t by \t\t\t different \t things"
workstr = re.sub('\s+','\t',line)
そのため、空白または区切り文字 ( \s
) が 1 回以上繰り返された場合 ( ) は、split('\t') で再処理できる+
単一の表 ( ) に変換されます。\t
workstr = "something`\t`separated`\t`by`\t`different`\t`things"
newline = workstr.split('\t')
newline = ['something','separated','by','different','things']
デフォルトでは、分割は複数のタイプの空白を処理できます。必要なものに十分かどうかはわかりませんが、試してみてください。
>>> s = "a \tb c\t\t\td"
>>> s.split()
['a', 'b', 'c', 'd']
複数のスペースとタブが混在していても確かに機能します。
空白の区切り記号については、str.split()
すでに必要なことが行われています。Python 標準ライブラリから、
力。分割([ 9月[,最大分割]])
sepが指定されていないか である場合
None
、別の分割アルゴリズムが適用されます。連続する空白の実行は単一の区切り文字と見なされ、文字列の先頭または末尾に空白がある場合、結果の先頭または末尾に空の文字列は含まれません。したがって、空の文字列または空白のみで構成される文字列を None セパレータで分割すると、[] が返されます。たとえば、
' 1 2 3 '.split()
return['1', '2', '3']
、および' 1 2 3 '.split(None, 1)
return['1', '2 3 ']
。
最初にテキスト置換を行い、次に分割します。
たとえば、すべてのタブをスペースに置き換えてから、スペースで分割します。
最初に正規表現を使用できます。
import re
re.sub('\s+', ' ', 'text with whitespace etc').split()
['text', 'with', 'whitespace', 'etc']