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 PG
De 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
stringr
que son utilisation est la meilleure réponse ici.@TimBiegeleisen Je suis d'accord, mais l'OP a mentionné à deux endroits l'utilisation de
stringr
Il 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)