假设我的字符串中有一个特定的模式,它出现了已知次数(n),我们不想对字符串的其余部分(特别是那些在这些模式之间的字符串)做任何假设。
此外,我有一个长度为n的向量(称为sf),我想用相应的元素修改每个模式的出现。因此,对于每个匹配,我想知道匹配已经命中了多少次?
我可以想到以下解决方案:
这个似乎可以工作,但感觉容易出错,因为我依赖于
有没有其他方法可以实现这个目标?最好使用stringr函数?
类似的想法:
此外,我有一个长度为n的向量(称为sf),我想用相应的元素修改每个模式的出现。因此,对于每个匹配,我想知道匹配已经命中了多少次?
我可以想到以下解决方案:
library(stringr)
sf <- letters[4:1]
ss <- "fdskjhf xx sd ss xx wwwe xx ss xx sdsd"
# ^^ 1st ^^ 2nd ^^ 3rd ^^ 4th
# add: _sf[1] _sf[2] _sf[3] _sf[4]
# that is: xx_d xx_c xx_b xx_a
## add _sf[i] to the ith occurence of "xx" in ss
goal <- "fdskjhf xx_d sd ss xx_c wwwe xx_b ss xx_a sdsd"
my_replacer_factory <- function(sf, start = 0) {
cnt <- start
function(el) {
cnt <<- cnt + 1
paste0(el, "_", rev(sf)[cnt])
}
}
my_replacer <- my_replacer_factory(sf)
(res <- str_replace_all(ss, fixed("xx"), my_replacer))
# [1] "fdskjhf xx_d sd ss xx_c wwwe xx_b ss xx_a sdsd"
all.equal(res, goal)
# [1] TRUE
这个似乎可以工作,但感觉容易出错,因为我依赖于
str_replace_all
从右边开始替换的事实。如果将来的实现中这种行为发生变化或并行化,该怎么办呢?有没有其他方法可以实现这个目标?最好使用stringr函数?
类似的想法:
my_replacer_factory <- function(sf) {
suffixes <- rev(sf)
function(el) {
on.exit(suffixes <<- suffixes[-1L], add = TRUE)
paste0(el, "_", suffixes[1L])
}
}
gsubfn/proto
,计数器已经免费添加了,而我之前需要自己保持更新。 - undefined