2013-11-03 20 views

Trả lời

3

Khái niệm đầu tiên là không hợp lệ theo cách bạn đang sử dụng nó, vì thế * là một nhân vật đặc biệt. Nếu bạn muốn sử dụng sub hoặc gsub theo cách này với các ký tự đặc biệt, bạn có thể sử dụng bộ thông số fixed = TRUE.

Điều này nhận chuỗi đại diện cho mẫu đang được tìm kiếm vì nó và bỏ qua bất kỳ ký tự đặc biệt nào.

Xem Pattern Matching and Replacement trong tài liệu R.

x <- 'Aug 2013****' 
gsub('*', '', x, fixed=TRUE) 
#[1] "Aug 2013" 

biểu hiện thứ hai của bạn chỉ được sử dụng một lớp nhân vật [] cho * để tránh thoát, giống như ..

x <- 'Aug 2013*' 
gsub('\\s|\\*', '', x) 
#[1] "Aug2013" 

Theo như lời giải thích biểu hiện đầu tiên của bạn: \\s|*

\s  whitespace (\n, \r, \t, \f, and " ") 
|  OR 

Và cụm từ thứ hai: \\s|[*]

\s  whitespace (\n, \r, \t, \f, and " ") 
|  OR 
[*]  any character of: '*' 
3

Việc sử dụng [] ở đây không có gì khác ngoài việc thoát khỏi * thành dấu hoa thị theo nghĩa đen.

Regex đầu tiên không hợp lệ (* là ký tự đặc biệt có nghĩa là "không hoặc nhiều hơn").

Các regex thứ hai là tương đương với

'\\s|\\*' 
Các vấn đề liên quan