2012-11-23 31 views
5

Mögliche Duplizieren:
Remove text inside brackets, parens, and/or bracesErsetzen von Text in Klammern in R

Ich mag würde die Klammer und den Text zwischen Klammern in einer großen Textdatei ersetzen.

Beispiel Eingang (Inhalt in der Textdatei):

Keep me (Remove Me 1). Again keep me (Remove Me 2). Again again keep me (Remove Me 3). 

Output (Inhalt in einer neuen Textdatei):

Keep me. Again keep me. Again again keep me. 

Ist es möglich, dies in R zu tun (sagen grep)

Antwort

20

Ja, verwenden Sie gsub(), um den gesamten Text, den Sie nicht möchten, durch eine leere Zeichenfolge zu ersetzen.

x <- "Keep me (Remove Me 1). Again keep me (Remove Me 2). Again again keep me (Remove Me 3)." 

Hier ist die regex Sie wollen:

gsub(" *\\(.*?\\) *", "", x) 
[1] "Keep me. Again keep me. Again again keep me." 

Es funktioniert wie folgt:

  • *? findet 0 oder mehr Leerzeichen vor (und nach) die Klammern.
  • Da ( und ) Sonderzeichen in einem regulären Ausdruck sind, müssen Sie diese entkommen, das heißt (\\(
  • Die .*? ist ein Platzhalter finden alle Zeichen zu finden, wo die ? Mittel in einem nicht-gierigen Weg zu finden. Dies ist notwendig, da regex standardmäßig gierig ist. mit anderen Worten, die standardmäßig die Regex das Spiel bei der ersten Öffnung Klammern beginnt und endet das Spiel in den letzten schließenden Klammer.
+0

+1 @Andrie Sie so schnell ! – agstudy

+5

15 Minuten zu einer Antwort ist in diesen Tagen kaum schnell.Ich kam nur damit durch, weil es immer noch Thanksgiving Urlaub und Mann ist Einer der Stammgäste isst immer noch Truthahnsandwiches. – Andrie

+0

Schnelle Anmerkung für Leute, die mit der Regex-Konstruktion nicht vertraut sind: Ich glaube 'gsub (glob2rx ('(*)'), '', x)' wird die Arbeit machen. –