R Language
Tekenreeksen wijzigen door vervanging
Zoeken…
Invoering
sub
en gsub
worden gebruikt om tekenreeksen met patronen te bewerken. Zie Patroonovereenkomst en vervanging voor meer informatie over gerelateerde functies en reguliere expressies voor het maken van een patroon.
Herschik tekenreeksen met vastleggroepen
Als u de volgorde van tekenreeksen wilt wijzigen, kunt u haakjes in het pattern
om delen van de tekenreeks samen te groeperen. Deze groepen kunnen in het replacement
argument worden geadresseerd met behulp van opeenvolgende getallen.
In het volgende voorbeeld wordt getoond hoe u een vector van namen van de vorm "achternaam, voornaam" opnieuw kunt rangschikken in een vector van de vorm "achternaam".
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"
Als u alleen de achternaam nodig heeft, kunt u gewoon de eerste paar haakjes aanspreken.
sub("^(.+),\\s(.+)", "\\1", strings)
# [1] "Sigg" "Holt" "Ortega" "De La Torre" "Perkins"
Verwijder dubbele opeenvolgende elementen
Laten we zeggen dat we een dubbel deel van een reeks willen verwijderen (dit kan meer dan één zijn). Bijvoorbeeld:
2,14,14,14,19
en converteer het naar:
2,14,19
Met gsub
kunnen we het bereiken:
gsub("(\\d+)(,\\1)+","\\1", "2,14,14,14,19")
[1] "2,14,19"
Het werkt ook voor meer dan één verschillende herhaling, bijvoorbeeld:
> gsub("(\\d+)(,\\1)+", "\\1", "2,14,14,14,19,19,20,21")
[1] "2,14,19,20,21"
Laten we de reguliere expressie toelichten:
-
(\\d+)
: een groep 1 gescheiden door () en vindt elk cijfer (minstens één). Vergeet niet dat we hier de dubbele backslash (\\
) moeten gebruiken, want voor een tekenvariabele vertegenwoordigt een backslash een speciaal escape-teken voor letterlijke tekenreeksscheidingstekens (\"
of\'
).\d\
is gelijk aan:[0-9]
. -
,
: A punctuatie teken:,
(we kunnen spaties of enige andere begrenzer) -
\\1
: een identieke tekenreeks als groep 1, dwz: het herhaalde nummer. Als dat niet gebeurt, komt het patroon niet overeen.
Laten we een soortgelijke situatie proberen: elimineer opeenvolgende herhaalde woorden:
one,two,two,three,four,four,five,six
Vervang vervolgens \d
door \w
, waarbij \w
overeenkomt met elk woordteken, inclusief: elke letter, cijfer of onderstrepingsteken. Het is gelijk aan [a-zA-Z0-9_]
:
> gsub("(\\w+)(,\\1)+", "\\1", "one,two,two,three,four,four,five,six")
[1] "one,two,three,four,five,six"
>
Vervolgens bevat het bovenstaande patroon als een geval met dubbele cijfers een geval met dubbele cijfers.