将字符串拆分为一个或多个空格上的子字符串

时间:2013-04-29 07:56:40

标签: regex string r split

我想在一个或多个空格(制表符,空格,...)出现的位置将一个字符串拆分为多个子字符串。 In the documentation of strsplit()它说,分裂被解释为正则表达式。

因此,我尝试了以下,但没有奏效:

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

它只返回:

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

但应该返回:

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

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:9)

尝试

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

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

答案 1 :(得分:7)

[:space:]必须放在字符类[]中才能使其正常工作,即[[:space:]][:space:]本身将被解释为由:spac,{{1}组成的字符类}}

e

请注意,默认情况下strsplit(test, "[[:space:]]+") 将使用POSIX ERE,这会导致strsplit区域设置相关解释。

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

如果您只想折叠所有空格(ASCII 32)并希望单独保留水平制表符perl和新行字符\t,则可以假定文本仅包含空格(ASCII 32)作为间距字符:

\n