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

R_U*_*ser 5 regex string split r

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

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

test = "123 nnn      dddddd"
strsplit(test, "[:space:]+")
Run Code Online (Sandbox Code Playgroud)

它只返回:

[[1]]
[1] "123 nnn      dddddd"
Run Code Online (Sandbox Code Playgroud)

但应该返回:

[[1]]
[1] "123" "nnn" "dddddd"
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题?

Chi*_*til 9

尝试

strsplit(test, '\\s+')
[[1]]
[1] "123"    "nnn"    "dddddd"
Run Code Online (Sandbox Code Playgroud)

\\s 将匹配所有空格字符.


nha*_*tdh 7

[:space:]必须放在一个字符类[]中才能使它工作,即[[:space:]].[:space:]对自己将被解释为包含的字符类:,s,p,a,c,e.

strsplit(test, "[[:space:]]+")
Run Code Online (Sandbox Code Playgroud)

请注意,默认情况下strsplit将使用POSIX ERE,这会导致依赖语言环境的解释[:space:].

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

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

strsplit(test, " +")
Run Code Online (Sandbox Code Playgroud)