2015-08-17 6 views
9

entkommen kann Ich versuche in R zu verwenden, um ein Bündel von seltsamen Zeichen in einigen Zeichenfolgen zu ersetzen, die ich bearbeite. Alles funktioniert, außer wenn ich "]" einlege, macht das Ganze nichts. Ich benutze \\ wie gsub("[\\?\\*\\]]", "", name), aber es funktioniert immer noch nicht. Hier ist mein aktuelles Beispiel:Wie man die geschlossene Klammer "]" in Regex in R

name <- "R U Still Down? [Remember Me]" 

, was ich will ist: names"R U Still Down Remember Me"

zu sein, wenn ich tun: names <- gsub("[\\(\\)\\*\\$\\+\\?'\\[]", "", name) es halb-Werke und ich "R U Still Down Remember Me]"

aber wenn ich tun: names <- gsub("[\\(\\)\\*\\$\\+\\?'\\[\\]]", "", name) nichts passiert. (d. h. ich bekomme "R U Still Down? [Remember Me]")

Irgendwelche Ideen? Ich habe versucht, die Reihenfolge der Dinge umzuschalten usw. Aber ich kann es nicht herausfinden.

Antwort

9

Aktivieren Sie einfach perl=TRUE Parameter.

> gsub("[?\\]\\[*]", "", name, perl=T) 
[1] "R U Still Down Remember Me" 

Und nur die benötigten Zeichen entkommen.

> gsub("[()*$+?'\\[\\]]", "", name, perl=T) 
[1] "R U Still Down Remember Me" 
8

Sie können die Reihenfolge der Zeichenklassen ändern, ohne zu entkommen.

name <- 'R U Still Down? [Remember Me][*[[]*' 
gsub('[][?*]', '', name) 
# [1] "R U Still Down Remember Me" 

Wenn Sie alle Satzzeichen entfernen möchten, verwenden Sie die POSIX-Klasse [:punct:]

gsub('[[:punct:]]', '', name) 

Diese Klasse im ASCII-Bereich entspricht allen nicht-Kontrollen, nicht-alphanumerische, nicht -space Zeichen.

ascii <- rawToChar(as.raw(0:127), multiple=T) 
paste(ascii[grepl('[[:punct:]]', ascii)], collapse="") 
# [1] "!\"#$%&'()*+,-./:;<=>[email protected][\\]^_`{|}~" 
+2

@MichaelChirico - wenn hwnd eine regex Frage beantwortet, störe ich mich nicht einmal. Er ist Chef. –

+1

Danke hwnd. Ich würde sagen, das qualifiziert sich als Chef. Nur eine weitere Frage: Ich verstehe nicht ganz, was mit 'gsub ('[] [? *]', '', Name) passiert. – seth127

+0

Würdest du mir nur erklären, warum ich den anderen Charakteren nicht entkommen muss? Ich werde das in einer For-Schleife über eine Reihe verschiedener Namen laufen lassen, also möchte ich nur sicherstellen, dass ich verstehe, was unter der Haube passiert. – seth127