我想在一个或多个空格(制表符,空格,...)出现的位置将一个字符串拆分为多个子字符串。 In the documentation of strsplit()
它说,分裂被解释为正则表达式。
因此,我尝试了以下,但没有奏效:
test = "123 nnn dddddd"
strsplit(test, "[:space:]+")
它只返回:
[[1]]
[1] "123 nnn dddddd"
但应该返回:
[[1]]
[1] "123" "nnn" "dddddd"
我的代码出了什么问题?
答案 0 :(得分:9)
尝试
strsplit(test, '\\s+')
[[1]]
[1] "123" "nnn" "dddddd"
\\s
将匹配所有空白字符。
答案 1 :(得分:7)
[:space:]
必须放在字符类[]
中才能使其正常工作,即[[:space:]]
。 [:space:]
本身将被解释为由:
,s
,p
,a
,c
,{{1}组成的字符类}}
e
请注意,默认情况下strsplit(test, "[[:space:]]+")
将使用POSIX ERE,这会导致strsplit
的区域设置相关解释。
在PCRE(Perl兼容正则表达式)中,[:space:]
与语言环境无关,相当于[:space:]
。因此,如果您希望在不同的语言环境中保持一致的行为,则可能需要启用\p{Xps}
标志。
如果您只想折叠所有空格(ASCII 32)并希望单独保留水平制表符perl
和新行字符\t
,则可以假定文本仅包含空格(ASCII 32)作为间距字符:
\n