用向量中的元素替换子字符串

时间:2014-10-21 23:31:33

标签: regex r

我有一段很长的string(不是vector string,只有一个string)。我希望在substring中多次发现某个string,并将其替换为substring,加上character vector中的元素。我想这样做,以便第一个substring替换为element的第一个vector,第二个substring由第二个元素等替换。

例如输入:

Stg<-c("cat fish dog cat fish dog cat fish dog cat fish dog")
Vec<-c(" one"," two"," red"," blue")

我想找到“cat”并将其替换为“cat”加上来自Vec的数据,以便输出

"cat one fish dog cat two fish dog cat red fish dog cat blue fish dog"

然而,在我的真实string中,我正在寻找的文本分散在各处(不是常规数量的字符或单词或实例之间的任何内容)。

似乎有几种方法可以从strigrstringi执行此操作,这将产生4个向量,每个向量都替换为Vec的不同成员,但我只想找到一个作为输出。

2 个答案:

答案 0 :(得分:2)

使用regmatches<-

regmatches(Stg,gregexpr("cat",Stg)) <- list(paste0("cat",Vec))
Stg
#[1] "cat one fish dog cat two fish dog cat red fish dog cat blue fish dog"

这与上一个问题非常相似:Replacing elements of a vector

如果您不想覆盖原始Stg向量,请使用以下代码:

`regmatches<-`(Stg, gregexpr("cat",Stg), value=list(paste0("cat",Vec)))

答案 1 :(得分:2)

现在我看到@ thelatemail的答案,这是一个不太酷的方法:

word <- "cat"
do.call(sprintf, c(list(gsub(word, "%s", Stg)), paste0(word, Vec)))

## [1] "cat one fish dog cat two fish dog cat red fish dog cat blue fish dog"
相关问题