我想在遇到“a”时拆分字符串,前提是“a”不应该跟“b”
string <- "abcgualoo87ahhabta"
我应该输出
string <- [1]abcgua
[2]loo87a
[3]hhabta
答案 0 :(得分:6)
您可以使用模式&#34; a后跟b&#34;来分割字符串。使用a(?=[^b])
中的正则表达式strsplit
:
split_str <- strsplit("abcgualoo87ahhabta", "a(?=[^b])", perl=TRUE)[[1]]
split_str
#[1] "abcgu" "loo87" "hhabta"
对分割模式的解释:前瞻((?=)
)与&#34;前瞻&#34;一起使用。模式,除了b([^b]
)之外的任何东西(^符号表示否定)。为了使前瞻工作(被解释),我们需要将参数perl
设置为TURE
然后你可以添加删除的&#34; a&#34;在拆分部分的末尾,除了最后一部分:
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"
答案 1 :(得分:2)
string <- "abcgualoo87ahhabta"
unlist(strsplit(gsub("a([^b])", "a \\1", string), split=" "))
# [1] "abcgua" "loo87a" "hhabta"