将RegEx与所有特殊字符匹配

时间:2017-12-02 20:17:19

标签: r regex

所以,我已经找到了一种制作正则表达式来匹配字符串中所有特殊字符的方法,但是,我还没有能够实现我的崇高事业。

我试图找到所有需要反击的角色,但有时它只是一个反斜杠,有时是两个,有的则是四个。 我也遇到了R包,它们每个都有正确的正则表达方式,所以你输入" BACKSLASH"它使它成为正确的方法,但我不知道我要删除的所有字符的实际英文名称。我也见过str_replace_all(x, "[[:punct:]]", " "),但我不确定它是否像我需要的那样有效。

我知道这是一个非常基本的(愚蠢的)问题,特别是对于那些了解正则表达式的人,但如果你能回复答案,我真的很感激。

总而言之,我有一个变量DirtyChars = c(',','。',&#39 ;;',&#39 ;',' /',' \','`',' [',' ;]',''',':','>','<&#39 ;,' |',' - ',' _',' =',' +' ,'(',')',' ^',' {','}' ,'〜',' \'',' *','&',' %',' $','!',' @','#')以及我想要的是制作一个匹配其所有元素的正则表达式。

就像我试过内爆(DirtyChars,sep =" |")或粘贴(" [",implode(DirtyChars,sep =" |&#) 34;),"]",sep ="")只有一个实际有效,因为这些不是。

1 个答案:

答案 0 :(得分:1)

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

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 demo

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