顯然有一個在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