Pregunta

tengo una cuerda, digamos

 fruit <- "()goodapple"

Quiero eliminar los corchetes de la cadena.Decido usar el paquete stringr porque normalmente puede manejar este tipo de problemas.Yo suelo :

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

Pero no se reemplaza nada y se reemplaza lo siguiente:

[1] "()good"

Si sólo quiero reemplazar el medio soporte derecho, funciona:

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

Sin embargo, el medio soporte izquierdo no funciona:

str_replace(fruit,"(","")

y se muestra el siguiente error:

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

¿Alguien tiene ideas de por qué sucede esto?Entonces, ¿cómo puedo eliminar el "()" en la cadena?

¿Fue útil?

Solución

Escapar del paréntesis lo hace...

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

Quizás también quieras considerar explorar el paquete "stringi", que tiene un enfoque similar a "stringr" pero tiene funciones más flexibles.Por ejemplo, hay stri_replace_all_fixed, que sería útil aquí ya que su cadena de búsqueda es un patrón fijo, no un patrón de expresiones regulares:

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

Por supuesto, básico gsub maneja esto muy bien también:

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

Otros consejos

La respuesta aceptada funciona para su problema exacto, pero no para el problema más general:

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

Esto se debe a que el regex coincide exactamente con un "(" seguido de un ")".

Suponiendo que se preocupa solo por los pares de soporte, esta es una solución más fuerte:

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

Edificio de la respuesta de MJH, esto elimina todo (o):

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top