在空格处分割R字符串,但当空格在单引号之间时不分割
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在空格处分割R字符串,但当空格在单引号之间时不分割相关的知识,希望对你有一定的参考价值。
我必须拆分一组丑陋而复杂的字符串:
vec <- c("'01'", "'01' '02'",
"#bateau", "#bateau #batiment",
"#'autres 32'", "#'autres 32' #'batiment 30'", "#'autres 32' #'batiment 30' #'contenu 31'",
"#'34'", "#'34' #'33' #'35'")
vec
[1] "'01'" "'01' '02'"
[3] "#bateau" "#bateau #batiment"
[5] "#'autres 32'" "#'autres 32' #'batiment 30'"
[7] "#'autres 32' #'batiment 30' #'contenu 31'" "#'34'"
[9] "#'34' #'33' #'35'"
我需要在有空格()的所有地方分割字符串,除非空格在
'
之间。因此,在上面的示例中,'01' '02'
将变为'01'
和'02'
,而#'autres 32' #'batiment 30'
将变为#'autres 32'
和#'batiment 30'
。
我曾尝试从this question中获得启发,但没有走得太远:
strsplit(vec, "(\s[^']+?)('.*?'|$)")
因为此解决方案拆分了一些不应有的空间,也使我失去了一些信息。
分割后的结果应该类似于:
res <- c("'01'", "'01'", "'02'",
"#bateau", "#bateau", "#batiment",
"#'autres 32'", "#'autres 32'", "#'batiment 30'", "#'autres 32'", "#'batiment 30'", "#'contenu 31'",
"#'34'", "#'34'", "#'33'", "#'35'")
分割此字符串的正确正则表达式是什么?
谢谢
答案
您可以使用
strsplit(vec, "'[^']*'(*SKIP)(*F)|\s+", perl=TRUE)
请参见R demo和regex demo在线。
详细信息
'[^']*'(*SKIP)(*F)
-'
,然后是除'
(请参阅[^']*
)之外的任何0+字符,然后是'
,然后将该匹配的文本丢弃,并从以下位置搜索下一个匹配项当前匹配失败(请参见(*SKIP)(*F)
)(*SKIP)(*F)
-或|
-1+个空格字符。
由于是PCRE模式,因此s+
是必需的。
以上是关于在空格处分割R字符串,但当空格在单引号之间时不分割的主要内容,如果未能解决你的问题,请参考以下文章
c语言 讲一个字符串str以空格为分割,分割后输出到一个一维数组
python字符串的操作(去掉空格strip(),切片,查找,连接join(),分割split(),转换首字母大写, 转换字母大小写...)