2015-05-01 22 views
6

Thông thường trong R có thể sử dụng siêu ký tự trong một regex với hai dấu gạch chéo, ví dụ: (Trở thành \ (, nhưng tôi tìm thấy cùng là không đúng đối với dấu ngoặc vuông.Regex cho dấu ngoặc vuông trong R

mystring <- "abc[de" 

#remove [,] and $ characters 

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

[1] "abc[de" 

[[:punct:]] công trình nhưng tôi ghét phải sử dụng một regex phi tiêu chuẩn nếu tôi không phải. Có thể cú pháp regex bộ được sử dụng

+2

Tại sao không 'gsub (" (\\ [| \\] | \\ $) "," ", mystring)'? Vẫn regex tiêu chuẩn, phải không? – Frank

+1

@Frank: Điều đó phù hợp với tôi. Nếu bạn muốn, bạn có thể thêm '| \\ $' cho đầy đủ với ví dụ của OP. Bất kể, đăng bài đó như là một câu trả lời và bạn đã có cho mình một upvote. –

Trả lời

5

bạn nên cho phép perl = TRUE, sau đó bạn có thể sử dụng cú pháp Perl giống như đó là thẳng hơn -phía trước (IMHO):

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

Xem demo

Kết quả:

[1] "abcde" 
+2

Giá trị mặc định trong các hàm regex R phải thực sự là 'perl = TRUE'. –

4

tôi sẽ để bên [ab] cú pháp và sử dụng (a|b) Bên cạnh làm việc, nó cũng có thể dễ đọc hơn:?.

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

Bạn có thể chỉ cần sử dụng \\[ là điều để phù hợp, bạn không cần phải thêm dấu ngoặc vuông trừ khi bạn đang phù hợp với nhiều tùy chọn:

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

Bạn có thể thực hiện việc này ngay cả sim pler và nhanh hơn cho các ký tự đơn bằng cách lấy đi những ý nghĩa đặc biệt sử dụng fixed=TRUE:

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

Hoặc nếu điều đầu tiên bên trong dấu ngoặc vuông là dấu ngoặc vuông (không thoát), sau đó chúng được thực hiện như là các ký tự chữ chứ không phải là có ý nghĩa đặc biệt thông thường:

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

Ồ, điểm cuối cùng là thú vị. Bao gồm dấu phẩy chỉ có thể gây nhầm lẫn (vì ba ký tự khác - '] [$' - thực sự là trong OP). – Frank

Các vấn đề liên quan