2015-05-01 16 views
6

Konwencjonalnie w R można używać metaznaków w regexie z dwoma ukośnikami, np. (Staje \ (, ale uważam, że sam nie jest prawdziwe dla nawiasach kwadratowych.Regex dla nawiasów prostokątnych w R

mystring <- "abc[de" 

#remove [,] and $ characters 

gsub("[\\[\\]$]","",mystring) 

[1] "abc[de" 

[[:punct:]] robót ale nienawidzę użyć niestandardowego regex, jeśli nie muszę. Czy zestaw regex składnia być stosowany

+2

Dlaczego nie 'gsub (" (\\ [| \\] | \\ $) "," ", mistring)"? Wciąż standardowy regex, prawda? – Frank

+1

@Frank: To działa dla mnie. Jeśli chcesz, możesz dodać '| \\ $' dla kompletności z przykładem OP. Niezależnie od tego, zamieść to jako odpowiedź, a otrzymasz uprowadzenie. –

Odpowiedz

5

należy włączyć perl = TRUE, a następnie można użyć Perl podobną składnię, która jest bardziej prosto -Naprzód (IMHO):

gsub("[\\[\\]$]","",mystring, perl = TRUE) 

Zobacz demo

Wynik:

[1] "abcde" 
+2

Domyślnie w funkcjach regex R powinno być naprawdę "perl = TRUE". –

4

chciałbym ominąć [ab] składni i używać (a|b) Oprócz pracy, może to również być bardziej czytelne:?.

gsub("(\\[|\\]|\\$)","",mystring) 
1

Można po prostu użyć \\[ jak rzeczy się zgadzają, nie trzeba dodatkowych nawiasów kwadratowych, chyba że są dopasowane wielokrotność opcje:

> mystring <- 'abc[de' 
> gsub("\\[", "", mystring) 
[1] "abcde" 

Możesz zrobić to jeszcze sim pler i szybciej dla pojedynczych znaków przez pozbawianie szczególne znaczenie przy użyciu fixed=TRUE:

> mystring <- 'abc[de' 
> gsub("[", "", mystring, fixed=TRUE) 
[1] "abcde" 

Lub jeśli pierwszą rzeczą wewnątrz nawiasów kwadratowych nawiasach kwadratowych (Niecytowany), następnie są one traktowane jako dosłowny charakter raczej niż posiadające zwykle specjalne znaczenie:

> mystring <- 'a,bc[d]e$' 
> gsub("[][,$]", "", mystring) 
[1] "abcde" 
+0

Och, ten ostatni punkt jest interesujący. Włączenie przecinka może być po prostu kłopotliwe (ponieważ pozostałe trzy znaki - '] [$ - - są w OP). – Frank

Powiązane problemy