ここにいくつかの選択肢があります。 pc
がスカラまたはベクトルの場合、すべてのソリューションが動作します。パッケージは必要ありません。それらのうち(3)は特に短く単純です。
1)マッチすべて(.*
)最後の桁(\\d
)まで、次に括弧の最初のセット内の部分に一致する、すなわち最初のキャプチャ(とそれを置き換える)、プラスと第二の捕捉(すなわち、最後の数字との一致)。
sub("(.*)(\\d)", "\\1+\\2", pc)
2)も短い代替の非数字が続く数字と一致し、一致続いプラスとそれを置き換えることである:
sub("(\\d\\D)", "+\\1", pc)
## [1] "bt4+3xx"
3)これは(2)よりも短くなります。これはマッチが続くプラスとの一致を置換最後の3つの文字にマッチ:
sub("(...)$", "+\\1", pc)
## [1] "bt4+3xx"
4)この1つは、個々の文字に文字列を分割append
を用いて適切な位置にプラスを挿入し、文字を置きます一緒に戻る
sapply(Map(append, strsplit(pc, ""), after = nchar(pc) - 3, "+"), paste, collapse = "")
## [1] "bt4+3xx"
pc
は、それが簡単にすることができ(該当の場合のように)スカラーであることが知られていた場合:+が後にあるように、これはOPのニーズに合わせていないようです
paste(append(strsplit(pc, "")[[1]], "+", nchar(pc) - 3), collapse = "")
[1] "bt4+3xx"
数字。 'サブ("(*)(\\ d \\ D {2}) "、" \\ 1 + \\ 2 "、pc)' – Haboryme
Ugh。私は逃しました。キャッチーありがとうございます。 – lmo