5

我想在出现一个或多个空格(制表符、空格...)的位置将一个字符串拆分为几个子字符串。在它的文档中strsplit()说,该拆分被解释为正则表达式。

因此,我尝试了以下方法,但没有成功:

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

它只返回:

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

但应该返回:

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

我的代码有什么问题?

4

2 回答 2

9

尝试

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

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

于 2013-04-29T08:05:27.070 回答
7

[:space:]必须放在一个字符类[]中才能使其工作,即[[:space:]]. [:space:]其本身将被解释为由 , :, s, p, a,c组成的字符类e

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

请注意,默认情况下将strsplit使用 POSIX ERE,这会导致[:space:].

在 PCRE(Perl 兼容正则表达式)中,[:space:]语言环境无关,等效于\p{Xps}. perl因此,如果您希望跨不同语言环境的行为保持一致,您可能需要启用标志。

如果您只想折叠所有空格(ASCII 32)并且想单独留下水平制表符\t和换行符\n,或者您可以假设文本仅包含空格(ASCII 32)作为间距字符:

strsplit(test, " +")
于 2013-04-29T08:02:10.383 回答