显然有一个在Hmisc包称为escapeRegex
功能。该功能本身具有以下定义为“串”的输入值:
gsub("([.|()\\^{}+$*?]|\\[|\\])", "\\\\\\1", string)
我以前的答案:
我不知道是否有一个内置的功能,但你可以做一做你想要什么。这基本上只是创建一个你想要替换的值的向量和一个你想要替换的向量,然后通过那些进行必要的替换循环。
re.escape <- function(strings){
vals <- c("\\\\", "\\[", "\\]", "\\(", "\\)",
"\\{", "\\}", "\\^", "\\$","\\*",
"\\+", "\\?", "\\.", "\\|")
replace.vals <- paste0("\\\\", vals)
for(i in seq_along(vals)){
strings <- gsub(vals[i], replace.vals[i], strings)
}
strings
}
一些输出
> test.strings <- c("What the $^&(){}.*|?", "foo[bar]")
> re.escape(test.strings)
[1] "What the \\$\\^&\\(\\)\\{\\}\\.\\*\\|\\?"
[2] "foo\\[bar\\]"
你可以添加一个示例字符串,你想要输出看起来像什么? – 2013-02-12 16:13:11
大多数正则表达式函数都有一个名为'fixed'的参数,如果设置为TRUE,则会使模式按原样匹配。 – Dason 2013-02-12 17:09:06
这并不好 - 我想从用户提供的输入中构建一个正则表达式,所以我需要“消毒”输入,但仍然使用正则表达式。 – Corone 2013-02-12 17:12:03