str_replace (paquet stringr) ne peut pas remplacer les parenthèses dans les r?

StackOverflow https://stackoverflow.com//questions/23065378

  •  26-12-2019
  •  | 
  •  

Question

J'ai une chaîne de caractères, dire

 fruit <- "()goodapple"

Je veux supprimer les crochets dans la chaîne.Je décide d'utiliser stringr colis, car il peut généralement gérer ce genre de problèmes.J'utilise :

str_replace(fruit,"()","")

Mais rien n'est remplacé, et celle-ci est remplacée:

[1] "()good"

Si je ne veux remplacer la moitié droite du support, il fonctionne:

str_replace(fruit,")","") 
[1] "(good"

Cependant, la moitié gauche du support ne fonctionne pas:

str_replace(fruit,"(","")

et le message d'erreur suivant s'affiche:

Error in sub("(", "", "()good", fixed = FALSE, ignore.case = FALSE, perl = FALSE) : 
 invalid regular expression '(', reason 'Missing ')''

Quelqu'un a des idées de pourquoi cela se produit?Comment puis-je supprimer les "()" dans la chaîne, alors?

Était-ce utile?

La solution

Fuyant les parenthèses t-il...

str_replace(fruit,"\\(\\)","")
# [1] "goodapple"

Vous pouvez également envisager d'explorer l' "stringi" package, qui a une approche similaire à "stringr" mais il a plus de fonctions flexibles.Par exemple, il y a stri_replace_all_fixed, ce qui serait utile ici depuis votre chaîne de recherche est un motif fixe, pas d'une expression régulière pattern:

library(stringi)
stri_replace_all_fixed(fruit, "()", "")
# [1] "goodapple"

Bien sûr, de base gsub les poignées de ce juste trop belle:

gsub("()", "", fruit, fixed=TRUE)
# [1] "goodapple"

Autres conseils

La réponse acceptée fonctionne pour votre problème exact, mais pas pour le problème plus général:

my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace(my_fruits,"\\(\\)","")
## "goodapple"  "(bad)apple", "(funnyapple"

C'est parce que la regex correspond exactement à un "(suivi d'un") ".

En supposant que vous vous souciez uniquement de paires de support, c'est une solution plus forte:

str_replace(my_fruits, "\\([^()]{0,}\\)", "")
## "goodapple"   "apple"       "(funnyapple"

Bâtiment de la réponse de MJH, cela supprime tout (ou):

my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace_all(my_fruits, "[//(//)]", "")

[1] "goodapple"  "badapple"   "funnyapple"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top