匹配字符串中的数字并在R中将它们加1

时间:2017-10-05 22:05:58

标签: r regex string numbers

我需要在字符串

中将“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?

2 个答案:

答案 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