2017-05-07 73 views
0

使用gsub()或RI substr()由大写字母标示零件想以下字符串分成使用GSUB

s <- c("IntAssisACTG", "IntFullPSYC", "IntAssocSOC") 

分成三个子部分

(1)为 “Int” (2)的下字母集合,以“Int”之后的第一个大写字母开头,在下一个大写字母之前结束,但长度不同(例如“Assis”,“Full”,“Assoc”) (3)其余的字母,不同长度(例如“ACTG”,“PSYC”,“SOC”)

我希望将三个部分原样返回,并将其作为一个向量(例如, “Int”“Assis”“ACTG”),我已经读过gsub更适合我需要的东西,因为它会分裂,而不会丢弃开始每个分割的角色。

我发现这个堆栈溢出

gsub("(?!^)(?=[[:upper:]])", " ", s, perl=T) 

而且越来越接近我想除了什么(i)其分裂所有首都的最后一段,而我需要他们在一个段(II)我不知道如何它的工作原理

任何帮助表示赞赏。

回答

1

替换为捕获组先行,并添加一个量词:

gsub("(?!^)([[:upper:]]+)", " $1", s, perl=T) 
+0

谢谢@Toto。我想我理解第二个捕获组。它的内容是:“如果有一个或多个大写字母,请将空间置于所引用段的前面。那是对的吗?我不知道第一组“(?!^)”是如何工作的。你能解释一下吗? – llewmills

+1

@llewmills:你是对的大号。 '(?!^)'被称为负反向保留,它是一个零长度的断言,假设我们不在字符串的开头。你会在这里找到有用的信息:http://www.regular-expressions.info/lookaround html的 – Toto