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

set*_*127 9 regex r gsub

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

有任何想法吗?我试过切换事情的顺序,等等.但我似乎无法弄明白.

Avi*_*Raj 9

只需启用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)


hwn*_*wnd 8

您可以在不转义的情况下切换字符类的顺序.

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)

  • 在字符类中,应用不同的元字符.即,插入符号`^`,连字符`-`和右括号`]`.您可以通过定位它们来避免逃避它们,以便它们的特殊含义无法应用.你可以把`]`放在开口支架之后或者在关闭支架之前,并且`^`放在开口支架之后的任何地方. (3认同)
  • @MichaelChirico - 当hwnd回答正则表达式问题时,我甚至都不打扰.他是老板. (2认同)
  • 就R解析规则来说,这是完全合理的,我从来没有想过这样.对于bracketry需要有一定的顺序.尼斯.谢谢@hwnd. (2认同)