2017-10-10 8 views
0

J'ai quelques chaînes dans un vecteur comme:R utilisation str_extract (stringr) pour exporter une chaîne entre « _ »

x <- c("ROH_Pete_NA_1_2017.zip", 
    "ROH_Annette_SA_2_2016.zip", 
    "ROH_Steve_MF_4_2015.zip") 

Je dois extraire les noms sur cette strings (Pete, Annette, Steve) Je voudrais faire , dans une boucle et avec str_extract()

toutes les chaînes commence par ROH_ mais la longueur des noms est différente et aussi les chaînes derrière.

Je voudrais utiliser str_extract() mais je suis aussi heureux d'autres solutions

Nous vous remercions de votre aide.

Répondre

3

Vous êtes probablement mieux avec str_match, car cela permet des groupes de capture. Vous pouvez donc ajouter le _ de chaque côté pour le contexte, mais ne renvoyer que le bit qui vous intéresse. Le (\\w+?) est le groupe de capture, et str_match renvoie ceci comme la deuxième colonne, d'où le [,2] (la première colonne est ce que retournerait str_extract) .

library(stringr) 
str_match(x,"ROH_(\\w+?)_")[,2] 

[1] "Pete" "Annette" "Steve" 
0

Vous pouvez utiliser la sous-fonction de base.

sub("ROH_([[:alpha:]]+)_.*","\\1",x,perl=T) 

[1] "Pete" "Annette" "Steve" 
1

Voici une solution avec str_extract:

library(stringr) 
str_extract(x, "(?<=_).+?(?=_)") 
# [1] "Pete" "Annette" "Steve" 

Vous pouvez également utiliser gsub dans la base R:

gsub("^.+?_|_.+$", "", x) 
# [1] "Pete" "Annette" "Steve" 
0

essayer le stringi pac kage:

library(stringi) 
stri_split_fixed(a,"_", simplify = T)[,2] 
[1] "Pete" "Annette" "Steve"