2017-10-05 63 views
0

我需要增加數加1,他們跟着一個字符串匹配數字和分別在R

「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中可能嗎?

回答

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