2017-11-26 1 views
0

Ich habe eine Zeichenfolge wie folgt: "21.-August-2017" und ich möchte das "st" nach 21 mit "xx" ersetzen, so dass das Ergebnisr gsub - ersetzen nur erste Übereinstimmung eines Wortes

ist

"25xx-August-2017"

Ich habe versucht, Regex Wiederholungsquantoren, z

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

Aber dies ersetzt immer noch beide Instanzen von "st". Wie kann ich angeben, dass nur die erste Instanz von "st" übereinstimmen soll?

+0

'sub (" st "," xx "," 21.-August-2017 ", behoben = WAHR)' –

Antwort

1

Versuchen Sie sub. Die beiden * Unterfunktionen unterscheiden sich nur dadurch, dass sub nur das erste Auftreten eines Musters ersetzt, während gsub alle Vorkommen ersetzt.

1

Verwenden Sie bitte sub anstelle von gsub.

Ersetzen das erste Auftreten eines Musters mit sub oder alle Vorkommen mit gsub ersetzen.

1

ein Lookbehind verwenden

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

Lookarounds eine bestimmte Position festzustellen, in Ihrem Fall, dass eine Ziffer vor st kommt.
Siehe a demo on regex101.com.

1

Sie können auch eine spezifischere Regex angeben. Für Ihren Fall

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

funktionieren würde (ersetzen alle Vorkommen von "st" voraus durch eine oder zwei Nummern)

Wenn Sie eine Menge von String-Manipulation tun, müssen auch schauen in das stringr Paket der hat ausführlichere Funktionsnamen und eine imho vernünftige Ordnung der Funktion paramters:

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