Frage

Ich habe zum Beispiel eine Schnur

 fruit <- "()goodapple"

Ich möchte die Klammern in der Zeichenfolge entfernen.Ich entscheide mich für die Verwendung des Stringr-Pakets, da es diese Art von Problemen normalerweise bewältigen kann.Ich benutze :

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

Aber nichts wird ersetzt, und Folgendes wird ersetzt:

[1] "()good"

Wenn ich nur die rechte Halbhalterung ersetzen möchte, funktioniert es:

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

Allerdings funktioniert die linke halbe Klammer nicht:

str_replace(fruit,"(","")

und der folgende Fehler wird angezeigt:

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

Hat jemand eine Idee, warum das passiert?Wie kann ich dann das „()“ in der Zeichenfolge entfernen?

War es hilfreich?

Lösung

Das Entkommen der Klammern bewirkt ...

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

Vielleicht möchten Sie auch die erkunden „stringi“-Paket, das einen ähnlichen Ansatz wie „stringr“ hat, aber flexiblere Funktionen bietet.Es gibt zum Beispiel stri_replace_all_fixed, was hier nützlich wäre, da Ihre Suchzeichenfolge ein festes Muster und kein Regex-Muster ist:

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

Natürlich, einfach gsub kommt damit auch ganz gut zurecht:

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

Andere Tipps

Die akzeptierte Antwort funktioniert für Ihr genaues Problem, jedoch nicht für das allgemeinere Problem:

generasacodicetagpre.

Dies liegt daran, dass der Regex genau mit einem "(" gefolgt von einem ") entspricht.

Angenommen, Sie kümmern sich nur um Klammerpaare, dies ist eine stärkere Lösung:

generasacodicetagpre.

Aufbau von MJHs Antwort, Entfernt alle (oder):

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top