在一个或多个空白字符上将字符串分割成子字符串

5
我希望将一个字符串在一个或多个空格(制表符、空格等)出现的位置拆分成几个子字符串。在 strsplit() 的文档 中,它说拆分被解释为正则表达式。
因此,我尝试了以下代码,但并没有成功:
test = "123 nnn      dddddd"
strsplit(test, "[:space:]+")

它只返回了:

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

但是应该返回:

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

我的代码有什么问题?


1
尝试使用以下代码替代:strsplit(test, "[ ]+") - Simon O'Hanlon
实际上,strsplit(test, " +") 也可以工作。 - plannapus
2个回答

9

请尝试

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

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


我希望我现在把我的评论放成了一个答案!! :) - Simon O'Hanlon

7

[:space:]必须放在字符类[]中才能起作用,即[[:space:]]。单独使用[:space:]将被解释为一个包含:space的字符类。

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

请注意,默认情况下,strsplit 将使用 POSIX ERE,这会导致对 [:space:]与语言环境相关的解释。
在 PCRE(Perl 兼容正则表达式)中,[:space:]与语言环境无关的,等效于 \p{Xps}。因此,如果您想在不同的语言环境下获得一致的行为,则可能需要启用 perl 标志。
如果您只想折叠所有空格(ASCII 32),并保留水平制表符 \t 和换行符 \n,请使用 OR,或者您可以假定文本仅包含空格(ASCII 32)作为空格字符:
strsplit(test, " +")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接