J'ai un objet appelé kemba_walker , qui contient ces caractères:
"Kemba Walker PG | # 8"
Comment puis-je extraire Kemba Walker PG en utilisant stringr ?
Je pense que je peux utiliser kemba_walker%>% str_extract ("") mais je ne connais pas regex, donc je n'ai aucune idée du modèle à mettre dans la fonction!
3 Réponses :
Vous pouvez utiliser le tube comme marqueur pour savoir comment trouver le nom du joueur:
input <- " Kemba Walker PG | #8"
name <- sub("^\\s*(.*?)\\s*\\|.*$", "\\1", input)
name
[1] "Kemba Walker PG"
Le regex fonctionne en capturant le nom du joueur dans (. *?) code >. Le remplacement, qui est le deuxième argument du sub , est \ 1 , qui est le groupe de capture.
Que signifie "\\ 1" ?
@akrun Il ne m'est jamais toujours clair si quelque chose est un duplicata exact . Il y a beaucoup plus de doublons de ce que je peux voir sur d'autres balises, telles que regex et SQL.
J'ai également hésité d'abord parce que l'OP a mentionné une solution stringr, mais ensuite je trouve le modèle exact avec sub . Mais, fermer une question avec dupe augmente les chances de la trouver via Google
Nous pouvons utiliser str_remove de stringr pour supprimer le caractère | suivi des autres caractères . *
str1 <- " Kemba Walker PG | #8"
Ou en utilisant str_extract pour extraire des caractères autres que | à partir du début ( ^ ) du string
trimws(str1, whitespace = "\\s*[|].*|\\s*", which = 'both') #[1] "Kemba Walker PG"
Ou en base R avec seulement trimws
trimws(str_extract(str1, "^[^|]+") #[1] "Kemba Walker PG"
Nous pouvons utiliser sub pour tout supprimer après "|"
read.table(text = vec, sep = "|", strip.white = TRUE)
Comme @ zx8754 le mentionne, nous pouvons également utiliser read.table
vec <- " Kemba Walker PG | #8"
trimws(sub("\\|.*", "", vec))
#[1] "Kemba Walker PG"
Pouvez-vous afficher quelques entrées supplémentaires de vos données? Quelle serait la règle pour extraire le nom du joueur? Avez-vous besoin des deux premiers mots de chaque entrée ou texte avant
"|"ou autre chose?Ronak, j'ai besoin des deux premiers mots de chaque entrée
@HowardBaek OK, mais est-ce que chaque entrée n'a que deux mots de nom? Et quelqu'un avec un deuxième prénom? Souhaitez-vous alors uniquement capturer le prénom et le deuxième prénom?
Ok les gars, pour garder les choses simples, je veux TOUS les caractères qui précèdent
|. Donc, je voudraisKemba Walker PGDe cette façon, je peux capturer les joueurs avec un deuxième prénom, comme l'a mentionné @TimBiegeleisen
Je viens de modifier ma question @akrun
@akrun Mais, ce n'est pas parce que l'OP a demandé la bibliothèque
stringrque son utilisation est la meilleure réponse ici.@TimBiegeleisen Je suis d'accord, mais l'OP a mentionné à deux endroits l'utilisation de
stringrIl s'agit d'un texte délimité par un tube, donc importez comme tel:
read.table (text = "Kemba Walker PG | # 8", sep = "|", strip.white = TRUE)