2013-04-29 24 views
5

文字列を複数の部分文字列に分割し、空白(タブ、スペースなど)が1つ以上ある場所で分割したいとします。 In the documentation of strsplit()それは、splitは正規表現として解釈されると言います。文字列を1つ以上の空白文字の部分文字列に分割する

は、このように私は動作しませんでした、次のことを試してみました:

[[1]] 
[1] "123 nnn  dddddd" 

をしかし、返す必要があります:

test = "123 nnn  dddddd" 
strsplit(test, "[:space:]+") 

それだけ返さ

[[1]] 
[1] "123" "nnn" "dddddd" 

いただきました間違った私のコードでは?

+1

代わりにこれを試してください: 'strsplit(test、" [] + ")' –

+0

実際に 'strsplit(test、" + ")'も同様に動作します。 – plannapus

答えて

9

strsplit(test, '\\s+') 
[[1]] 
[1] "123" "nnn" "dddddd" 

\\sは、すべての空白文字と一致します試してみてください。

+0

私は答えとして私のコメントを入れて欲しいと思います!! :) –

7

[:space:]は、文字クラス[]の中に配置する必要があります。つまり、[[:space:]]です。 [:space:]は、:,s,p,a,c,eからなる文字クラスとして解釈されます。

strsplit(test, "[[:space:]]+") 

デフォルトstrsplit[:space:]ロケールに依存解釈になりPOSIX EREを、使用することに注意してください。

PCRE(Perl互換正規表現)では、[:space:]ロケールに依存しないであり、\p{Xps}に相当します。したがって、異なるロケール間で一貫性のある動作が必要な場合は、perlフラグを有効にすることができます。

あなただけのすべてのスペース(ASCII 32)が崩壊したいと水平タブ\tと改行文字のみ\nを残したい、またはテキストがスペーシング文字としてのみスペース(ASCII 32)が含まれていると仮定することができた場合:

strsplit(test, " +") 
+0

明確な答えの素晴らしい例 –

関連する問題