R正则表达式可以替换开口支架而不是关闭支架

时间:2016-10-05 07:43:55

标签: r regex gsub brackets square-bracket

我正在尝试替换字符串中的开始和结束括号。 R似乎是为开场括号做的:

> gsub("[\\[]","==","hello [world]")
[1] "hello ==world]"

但不是结束括号

> gsub("[\\]]","==","hello [world]")
[1] "hello [world]"

为什么会这样?

3 个答案:

答案 0 :(得分:2)

看,gsub("[\\]]","==","hello\\] [world]")[\]]中的模式实际上与\后跟]匹配。试试gsub("[\\]]","==","hello\\] [world]"),结果将是hello== [world],字面反斜杠将被替换。

在TRE正则表达式模式中,括号表达式中的\与文字反斜杠匹配。

作为"[\\]]"正则表达式的修正,您可以从模式中删除\

gsub("[[]","==","hello [world]")

请参阅this R online demo

你可以用PCRE模式转义它,因为PCRE 字符类允许它们内的转义字符:

gsub("[\\[]","==","hello [world]", perl=TRUE)

请参阅another demo

如果您需要替换[],只需将][放在括号表达式中:

 gsub("[][]","==","hello [world]")

答案 1 :(得分:1)

这很简单:

gsub("]", "==","hello [world]")
#"hello [world=="

答案 2 :(得分:1)

可能更可读/更直接的方法是使用stringi

library(stringi)
stri_replace_all_regex('hello [world]', '\\[|]', '==')
#[1] "hello ==world=="