Ich versuche herauszufinden, wie man mit der Unterfunktion in R alles nach der zweiten Zahl zieht. Ich verstehe die Grundlagen mit dem faulen und gierigen Matching, aber wie gehe ich einen Schritt weiter und ziehe alles nach der zweiten Zahl?
str <- 'john02imga-04'
#faul: zieht alles nach der ersten Zahl
sub(".*?[0-9]", "", str)
#ausgabe: "2imga-04
#gierig: zieht alles nach der letzten Zahl
sub(".*[0-9]", "", str)
#Ausgang: ""
#gewünschte Ausgabe: "imga-04"
Sie können eine Capture-Gruppe für den zweiten Teil verwenden und diese im Ersatz verwenden
^\D+\d+(\D+\d+)
^
Anfang der Zeichenfolge\D+\d+
Übereinstimmung mit 1+ Nicht-Ziffern, dann 1+ Ziffern(\D+\d+)
Capture - Gruppe 1 , entsprechen 1+ nicht Ziffern und entsprechen 1+ Ziffernstr <- 'john02imga-04'
sub("^\\D+\\d+(\\D+\\d+)", "\\1", str)
Ausgabe
[1] "imga-04"
Wenn Sie alle nach der zweiten Zahl entfernen möchten:
^\D+\d+(\D+\d+).*
Als Alternative, um eine Übereinstimmung nur mit perl=T
PCRE zu erhalten und \K
den Match-Puffer zu löschen:
str <- 'john02imga-04'
regmatches(str, regexpr("^\\D+\\d+\\K\\D+\\d+", str, perl = T))
Ausgabe
[1] "imga-04"
Sehen Sie sich eine R-Demo an
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen