2017-09-08 13 views
1

MyString = "aabbccawww"という文字列があります。 MyStringの最後の "a"を "A"、つまりと置き換えてgsub式を使用してとしたいと思います。それは "aabbccAwww"です。私はウェブサイトで同様の質問を見つけましたが、彼らはすべて最後の出来事とその後のすべてを置き換えるように要求しました。 私はgsub( "a [^ a] * $"、 "A"、MyString)を試しましたが、 "aabbccA"を返します。私はその目的のためにstringi関数を使用することができることを知っていますが、そのような関数を使用するコードの一部に実装するソリューションが必要です。したがって、正規表現を使用したいと思います。 提案がありますか?正規表現を使用して文字列の最後の出現箇所を置き換えます。

答えて

4

私たちは「」「A」([^a]*)ではありません、ゼロ以上の文字に続いて、文字列の末尾($)までグループ((...))としてそれをキャプチャし、それを置き換えると一致するsubを使用することができます「A」キャプチャグループの後方参照が続く(\\1

sub("a([^a]*)$", "A\\1", MyString) 
#[1] "aabbccAwww" 
+0

ありがとうございました。あなたは "A \\ 1"を使用せず、空いているプレースメントを提案していますか?文字列中の最後の "a"を伝える正規表現です。 – Rtist

3

あなたは文字列を扱うには非常に簡単になりますstringiライブラリを使用することができ、すなわち

library(stringi) 

x <- "aabbccawww" 
stri_replace_last_fixed(x, 'a', 'A') 
#[1] "aabbccAwww" 
0

問題を解決する必要がありますakrunの答えが(わからない、まだ\1などで働いていない)が、あなたはまた、展望台を使用することができます。

a(?!(.|\n)*a) 

は、これは基本的に言っている:任意のが続かないaを探します文字数はaです。 (?!x)は、いわゆるルックアウトであり、これは、検索された表現がマッチに含まれないことを意味する。

.は改行を除いてすべての文字を意味するので、(.|\n)が必要です。

ルックアウトやその他の正規表現については、http://regexr.com/をお勧めします。

+0

私は試しました:gsub( "a(?!(。| \ n)* a)"、 "A"、MyString)。 "無効なregexp"は動作しません。あなたは何か考えていますか? – Rtist

+0

Rの正規表現がルックアウトをサポートしていない可能性があります。私はR開発者ではありません。一般的な解決策を提供しようとしました。とにかく、それはルックアウトをサポートしていない場合は、ちょうど私の解決策をダンプ、それはその場合は助けになりません。もう一つのアイデアですが、Rで可能かどうかは分かりませんが、あなたの文字列を逆向きに繰り返すことはできますか?もしそうなら、最初に見つかった 'a'(文字列中の最後の' a'と等しく、あなたが後方に向かうのを見て)を置き換えて、望みの結果を得ることができます。 – PixelMaster

+0

私はそれがうまくいかない理由を理解しようとします。タンク – Rtist

関連する問題