我正在尝试使用gsubR来替换我正在处理的一些字符串中的一堆奇怪的字符.一切正常,除非我投入"]",这使整个事情无所作为.我正在使用\\,gsub("[\\?\\*\\]]", "", name)但它仍然无法正常工作.这是我的实际例子:
name <- "R U Still Down? [Remember Me]"
Run Code Online (Sandbox Code Playgroud)
我想要的是:names成为"R U Still Down Remember Me"
当我这样做:
names <- gsub("[\\(\\)\\*\\$\\+\\?'\\[]", "", name)
它半工作,我得到"R U Still Down Remember Me]"
但是当我这样做时:
names <- gsub("[\\(\\)\\*\\$\\+\\?'\\[\\]]", "", name)
没有任何反应.(即我得到"R U Still Down? [Remember Me]")
有任何想法吗?我试过切换事情的顺序,等等.但我似乎无法弄明白.
只需启用perl=TRUE参数.
> gsub("[?\\]\\[*]", "", name, perl=T)
[1] "R U Still Down Remember Me"
Run Code Online (Sandbox Code Playgroud)
并且只逃避所需的角色.
> gsub("[()*$+?'\\[\\]]", "", name, perl=T)
[1] "R U Still Down Remember Me"
Run Code Online (Sandbox Code Playgroud)
您可以在不转义的情况下切换字符类的顺序.
name <- 'R U Still Down? [Remember Me][*[[]*'
gsub('[][?*]', '', name)
# [1] "R U Still Down Remember Me"
Run Code Online (Sandbox Code Playgroud)
如果要删除所有标点符号,请使用POSIX类 [:punct:]
gsub('[[:punct:]]', '', name)
Run Code Online (Sandbox Code Playgroud)
ASCII范围内的此类匹配所有非控件,非字母数字,非空格字符.
ascii <- rawToChar(as.raw(0:127), multiple=T)
paste(ascii[grepl('[[:punct:]]', ascii)], collapse="")
# [1] "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
Run Code Online (Sandbox Code Playgroud)