2013-04-29 245 views
5

我想在一個或多個空格(tab,space,...)出現的位置將字符串拆分爲多個子字符串。它說,這個分​​裂被解釋爲正則表達式。將字符串拆分爲一個或多個空格上的子字符串

因此我嘗試以下,沒有工作:

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

它只返回:

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

但應該返回:

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

哪些錯誤在我的代碼?

+1

試試這個:'strsplit(test,「[] +」)' – 2013-04-29 07:59:56

+0

'strsplit(test,「+」)''也適用。 – plannapus 2013-04-29 08:04:22

回答

9

嘗試

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

\\s會匹配所有空白字符。

+0

我希望我現在把我的評論作爲答案! :) – 2013-04-29 08:51:29

7

[:space:]必須放在字符類[]內才能使其起作用,即[[:space:]][:space:]本身將被解釋爲由:,s,p,a,c,組成的字符類。

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

注意,默認情況strsplit將使用POSIX ERE,這導致[:space:]語言環境有關的解釋。

在PCRE(Perl兼容正則表達式)中,[:space:]與區域無關的,相當於\p{Xps}。因此,如果您希望跨不同語言環境的一致行爲,則可能需要啓用perl標誌。

如果你只想摺疊所有空格(ASCII 32),並想離開水平製表符\t和換行符單獨\n,或者你可以假定文本只包含空格(ASCII 32)爲空格字符:

strsplit(test, " +") 
+0

明確答案的好例子 – 2013-04-29 09:47:32

相關問題