2017-10-05 14 views
0
でそれらに1を追加し、私はから文字列で1

マッチ番号およびR

で「ABC」の次の番号を増やす必要が

:へ「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と数字をキャプチャし、あなたは1にマッチした数字を増やし、捕獲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