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]")
尽管如此,您可以在 PCRE 模式中转义它,因为 PCRE 字符 类 允许在其中转义字符:
gsub("[\[]","==","hello [world]", perl=TRUE)
如果您需要替换 [
或 ]
,只需将 ][
放在方括号表达式中:
gsub("[][]","==","hello [world]")
这很有效:
gsub("]", "==","hello [world]")
#"hello [world=="
一个可能更 readable/straight 的方法是 stringi
,
library(stringi)
stri_replace_all_regex('hello [world]', '\[|]', '==')
#[1] "hello ==world=="
我正在尝试替换字符串中的左括号和右括号。 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]")
尽管如此,您可以在 PCRE 模式中转义它,因为 PCRE 字符 类 允许在其中转义字符:
gsub("[\[]","==","hello [world]", perl=TRUE)
如果您需要替换 [
或 ]
,只需将 ][
放在方括号表达式中:
gsub("[][]","==","hello [world]")
这很有效:
gsub("]", "==","hello [world]")
#"hello [world=="
一个可能更 readable/straight 的方法是 stringi
,
library(stringi)
stri_replace_all_regex('hello [world]', '\[|]', '==')
#[1] "hello ==world=="