184 votes

Extraire une sous-chaîne en fonction d'un motif

Supposons que j'ai une liste de chaînes de caractères :

string = c("G1:E001", "G2:E002", "G3:E003")

Maintenant, j'espère obtenir un vecteur de chaîne qui ne contient que les parties après les deux points " :", c'est-à-dire substring = c(E001,E002,E003) .

Existe-t-il un moyen pratique de le faire dans R ? Utilisation de substr ?

6voto

snoram Points 5944

Si vous utilisez data.table puis tstrsplit() est un choix naturel :

tstrsplit(string, ":")[[2]]
[1] "E001" "E002" "E003"

6voto

Moody_Mudskipper Points 18115

El décoller fournit une alternative, aucune connaissance des expressions régulières n'est requise pour les cas simples, ici nous ferions :

# install.packages("unglue")
library(unglue)
string = c("G1:E001", "G2:E002", "G3:E003")
unglue_vec(string,"{x}:{y}", var = "y")
#> [1] "E001" "E002" "E003"

Créé le 2019-11-06 par le paquet reprex (v0.3.0)

Plus d'informations : https://github.com/moodymudskipper/unglue/blob/master/README.md

5voto

Tho Vu Points 1097

Une autre méthode pour extraire une sous-chaîne

library(stringr)
substring <- str_extract(string, regex("(?<=:).*"))
#[1] "E001" "E002" "E003
  • (?<=:) : regardez derrière les deux points ( : )

4voto

andrasz Points 487

Étonnamment, une solution très "base R" n'a pas encore été ajoutée :

string = c("G1:E001", "G2:E002", "G3:E003")

regmatches(string, regexpr('E[0-9]+', string))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X