R正则表达式可以替换左括号但不能替换右括号

R regex can replace opening bracket but not closing bracket

我正在尝试替换字符串中的左括号和右括号。 R 似乎是为左括号做的:

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

但不是右括号

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

为什么会这样?

看,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]")

这很有效:

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

一个可能更 readable/straight 的方法是 stringi,

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