2017-11-26 17 views
0

"21st-August-2017"のような文字列があり、結果がrgsub - 単語の最初の一致のみを置換する

のように21の後に "st"を "xx"に置き換えたい

「25xx-August-2017」

私は正規表現の繰り返し数量子を使用してみました。

gsub("st{1}", "xx", "21st-August-2017") 

しかし、これは "st"の両方のインスタンスを置き換えます。 "st"の最初のインスタンスと一致するように指定するにはどうすればよいですか?

+0

'sub(" st "、" xx "、" 21st-August-2017 "、fixed = TRUE)' –

答えて

1

お試しsubです。 2つの* sub関数は、subがパターンの最初の出現のみを置き換え、gsubはすべての出現を置き換える点が異なります。

1

gsubの代わりにsubを使用してください。

パターンの最初の出現をsubに置き換えるか、すべての出現をgsubに置き換えます。

1

s <- c("21st-August-2017") 
gsub("(?<=\\d)st", "xx", s, perl = TRUE) 
# [1] "21xx-August-2017" 

前後参照は数字がstの前に来ることをあなたのケースでは、特定の位置を確認後読みを使用してください。
a demo on regex101.comを参照してください。

1

さらに特定の正規表現を指定することもできます。あなたのケースのために

gsub("(\\d1{1,2}st){1}", "xx", "21st-August-2017")

はあなたにもstringrパッケージに見える文字列操作の多くを行う必要がある場合

(一つまたは二つの数字が先行"st"のすべての出現を置き換える)働くことになります

stringi::stri_replace_first_regex("21st-August-2017", "st{1}", "xx") stringi::stri_replace_first_fixed("21st-August-2017", "st", "xx")

:より詳細な関数名や関数偶然にの私見より賢明な順序を持っています
関連する問題