我需要在字符串
中将“abc”后的数字增加1来自:“abc1 + abc34 + def7”
要:“abc2 + abc35 + def7”
尝试失败:
string <- "abc1 + abc34 + def7"
gsub("abc([0-9]+)","abc\\1\\+1",string)
给我这个:
“abc1 + 1 + abc34 + 1 + def7”
因为替换被视为字符串,而不是表达式。
似乎可能在Perl(perl example)中。是否有可能在R?
答案 0 :(得分:3)
您可以使用gsubfn
;捕获abc
及其后的数字,创建一个替换函数,您可以将匹配的数字增加一个,并将其粘贴到捕获的abc
:
library(gsubfn)
# here the first argument x is the first captured group, and y is the second captured group
gsubfn("(abc)(\\d+)", ~ paste(x, as.numeric(y) + 1, sep=""), string)
# [1] "abc2 + abc35 + def7"
答案 1 :(得分:3)
您可以设置perl=TRUE
并使用regmatches
来完成此操作,这只是有点难看:
> m <- gregexpr('(?<=abc)[0-9]+', string, perl=TRUE)
> regmatches(string, m)
[[1]]
[1] "1" "34"
> regmatches(string,m)[[1]] <- as.character(as.numeric(regmatches(string,m)[[1]]) + 1)
> string
[1] "abc2 + abc35 + def7