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: '*'
'*' là một ký tự đặc biệt trong regex, do đó, '[]' buộc phải diễn giải theo nghĩa đen của ký tự. – joran