Domanda

Ho una stringa, dì

 fruit <- "()goodapple"
.

Voglio rimuovere le staffe nella stringa.Decido di utilizzare il pacchetto Stringr perché di solito può gestire questo tipo di problemi.Io uso:

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

Ma nulla viene sostituito, e il seguente è sostituito:

[1] "()good"
.

Se voglio solo sostituire la mezza staffa destra, funziona:

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

Tuttavia, la durata mezza sinistra non funziona:

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

E viene visualizzato il seguente errore:

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

Qualcuno ha idee perché questo accade?Come posso rimuovere il "()" nella stringa, allora?

È stato utile?

Soluzione

Escaping Le parentesi lo fa ...

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


.

Si può anche desiderare di prendere in considerazione l'esplorazione del "stringi" pacchetto , che ha un approccio simile a "stringr" ma ha funzioni più flessibili.Ad esempio, c'è stri_replace_all_fixed, che sarebbe utile qui poiché la tua stringa di ricerca è un modello fisso, non un motivo regex:

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


.

Certo, gsub di base Gestisci anche questo bene:

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

Altri suggerimenti

La risposta accettata funziona per il tuo problema esatto, ma non per il problema più generale:

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

Questo perché il regex corrisponde esattamente a "(" seguito da A ")".

Supponendo che ti importa solo sulle coppie della staffa, questa è una soluzione più forte:

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

Costruire la risposta di MJH, questo rimuove tutto (o):

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top