R Language
Ändern von Strings durch Ersetzen
Suche…
Einführung
sub
und gsub
werden verwendet, um Strings anhand von Mustern zu bearbeiten. Weitere Informationen zu verwandten Funktionen und zu regulären Ausdrücken finden Sie unter Musterübereinstimmung und -austausch .
Zeichnen Sie Zeichenfolgen mithilfe von Erfassungsgruppen neu an
Wenn Sie die Reihenfolge von Zeichenfolgen ändern möchten, können Sie im pattern
Klammern verwenden pattern
um Teile der Zeichenfolge zusammenzufassen. Diese Gruppen können im replacement
mit fortlaufenden Nummern adressiert werden.
Das folgende Beispiel zeigt, wie Sie einen Vektor mit Namen der Form "Nachname, Vorname" in einen Vektor der Form "Vorname Nachname" umordnen können.
library(randomNames)
set.seed(1)
strings <- randomNames(5)
strings
# [1] "Sigg, Zachary" "Holt, Jake" "Ortega, Sandra" "De La Torre, Nichole"
# [5] "Perkins, Donovon"
sub("^(.+),\\s(.+)$", "\\2 \\1", strings)
# [1] "Zachary Sigg" "Jake Holt" "Sandra Ortega" "Nichole De La Torre"
# [5] "Donovon Perkins"
Wenn Sie nur den Nachnamen benötigen, können Sie nur die ersten Klammerpaare ansprechen.
sub("^(.+),\\s(.+)", "\\1", strings)
# [1] "Sigg" "Holt" "Ortega" "De La Torre" "Perkins"
Beseitigen Sie doppelte aufeinanderfolgende Elemente
Nehmen wir an, wir wollen duplizierte Untersequenzelemente aus einer Zeichenfolge entfernen (es kann mehr als eine sein). Zum Beispiel:
2,14,14,14,19
und konvertiere es in:
2,14,19
Mit gsub
können wir es erreichen:
gsub("(\\d+)(,\\1)+","\\1", "2,14,14,14,19")
[1] "2,14,19"
Es funktioniert auch für mehr als eine andere Wiederholung, zum Beispiel:
> gsub("(\\d+)(,\\1)+", "\\1", "2,14,14,14,19,19,20,21")
[1] "2,14,19,20,21"
Lassen Sie uns den regulären Ausdruck erklären:
-
(\\d+)
: Eine durch () begrenzte Gruppe 1, die eine beliebige Ziffer (mindestens eine) findet. Denken Sie daran, dass Sie hier den doppelten Backslash (\\
) verwenden müssen, da ein Backslash für eine Zeichenvariable ein spezielles Escape-Zeichen für literale Zeichenfolgenbegrenzer (\"
oder\'
) darstellt.\d\
entspricht:[0-9]
. -
,
: Ein Satzzeichen:,
(wir können Leerzeichen oder andere Trennzeichen enthalten) -
\\1
: Eine mit der Gruppe 1 identische Zeichenfolge, dh die wiederholte Nummer. Wenn dies nicht der Fall ist, stimmt das Muster nicht überein.
Versuchen wir eine ähnliche Situation: Beseitigen Sie aufeinander folgende wiederholte Wörter:
one,two,two,three,four,four,five,six
Dann ersetzen Sie einfach \d
durch \w
, wobei \w
beliebigen Wortzeichen entspricht, einschließlich Buchstaben, Ziffern oder Unterstrichen. Es ist äquivalent zu [a-zA-Z0-9_]
:
> gsub("(\\w+)(,\\1)+", "\\1", "one,two,two,three,four,four,five,six")
[1] "one,two,three,four,five,six"
>
Das obige Muster enthält dann als einen Fall doppelte Ziffern.