如何在R中的正则表达式中避开闭括号“]”

时间:2015-08-17 00:28:25

标签: regex r gsub

我正在尝试在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]"

有什么想法吗?我试图改变事物的顺序等等。但我似乎无法弄明白。

2 个答案:

答案 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] "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"