r语言 - 将正则表达式与所有特殊字符匹配



所以,我一直在寻找一种方法来制作正则表达式来匹配字符串中的所有特殊字符,但是,我无法实现我的崇高事业。

我试图找到所有需要反斜杠的字符,但有时是一个反斜杠,有时是两个,有时是四个。 我还遇到了R包,它对每个都有正确的正则表达式方式,因此您键入" BACKSLASH"并使其成为正确的方式,但我不知道我要删除的所有字符的实际英文名称。我也看过str_replace_all(x, "[[:punct:]]", " ")但我不确定它是否像我需要的那样工作。

我知道这是一个非常基本(甚至愚蠢)的问题,特别是对于了解正则表达式的人来说,但如果你能回答答案,我将不胜感激。

长话短说,我有一个变量 DirtyChars = c(',', '.', ';', '?', '/', '\', ', '[', ']', '', ':', '>', '<', '|', '-', '_', '=', '+', '(', ')', '^', '{', '}', '~', '\'', '*', '&', '%', '$', '!', '@', '#'),我想要的是制作一个匹配其所有元素的正则表达式。

就像我尝试过的那些 implode(DirtyChars, sep = "|") 或 paste("[", implode(DirtyChars, sep = "|"), "]", sep = ") 只有一个真正有效,因为这些不起作用。

你可以从这个字符向量动态地构建一个字符类,并在以后使用它来匹配这些字符:

DirtyChars = c(',', '.', ';', '?', '/', '\', '`', '[', ']', '"', ':', '>', '<', '|', '-', '_', '=', '+', '(', ')', '^', '{', '}', '~', ''', '*', '&', '%', '$', '!', '@', '#')
s <- "#w$o;r&d^$"
escape_for_char_class <- function(s) {gsub("([]^\\-])", "\\\1", s)}
pattern <- paste0("[", escape_for_char_class(paste(DirtyChars, collapse="")), "]")
## [1] "[,.;?/\\`[\]":><|\-_=+()\^{}~'*&%$!@#]"
gsub(pattern, "", s, perl=TRUE)
## [1] "word"

请参阅 R 演示。

escape_for_char_class函数转义必须在 PCRE 正则表达式中的字符类中转义的^-]字符。然后,使用[...]构建模式,这些形成与类中定义的任何字符匹配的字符类。最后一行gsub必须与perl=TRUE一起使用,因为模式与 PCRE 兼容,TRE 正则表达式不支持模式中的转义字符。

最新更新