您可以使用正则表达式a(?=[^b])
中的"a not follow b"模式拆分字符串strsplit
:
split_str <- strsplit("abcgualoo87ahhabta", "a(?=[^b])", perl=TRUE)[[1]] split_str #[1] "abcgu" "loo87" "hhabta"
分裂模式的解释: lookahead((?=)
)与"向前看"模式一起使用,除了ab([^b]
)之外的任何东西(^符号表示否定).为了使前瞻工作(被解释),我们需要将参数设置perl
为TURE
然后你可以在分割部分的末尾添加删除的"a",除了最后一个:
split_str <- paste0(c(rep("a", length(split_str)-1), "")) #[1] "abcgua" "loo87a" "hhabta"
@nicola在评论中提供的一个很好的一步替代方案:
split_str <- strsplit("abcgualoo87ahhabta","(?<=a)(?!b)", perl=TRUE)[[1]] #[1] "abcgua" "loo87a" "hhabta"