我正在尝试在R中使用gsub
来替换我正在处理的一些字符串中的一堆奇怪字符。一切正常,除非我投入“]”它会让整个事情无所作为。我正在使用\\
gsub("[\\?\\*\\]]", "", name)
,但它仍然不起作用。这是我的实际例子:
name <- "R U Still Down? [Remember Me]"
我想要的是: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]"
)
有什么想法吗?我试图改变事物的顺序等等。但我似乎无法弄明白。
答案 0 :(得分:9)
只需启用perl=TRUE
参数。
> gsub("[?\\]\\[*]", "", name, perl=T)
[1] "R U Still Down Remember Me"
只逃避所需的角色。
> gsub("[()*$+?'\\[\\]]", "", name, perl=T)
[1] "R U Still Down Remember Me"
答案 1 :(得分:8)
您可以在不转义的情况下切换字符类的顺序。
name <- 'R U Still Down? [Remember Me][*[[]*'
gsub('[][?*]', '', name)
# [1] "R U Still Down Remember Me"
如果要删除所有标点字符,请使用POSIX类[:punct:]
gsub('[[:punct:]]', '', name)
ASCII范围内的此类匹配所有非控件,非字母数字,非空格字符。
ascii <- rawToChar(as.raw(0:127), multiple=T)
paste(ascii[grepl('[[:punct:]]', ascii)], collapse="")
# [1] "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"