2017-12-02 136 views
1

因此,我寻找了一种方法来使正则表达式匹配字符串中的所有特殊字符,但是,我一直无法实现我的高贵企业。将RegEx与所有特殊字符匹配

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

据我所知,这是一个非常基本的(甚至是愚蠢的)问题,尤其是对谁知道正则表达式的人,但我会很感激,如果你能有一个答案回答。为了长话短说我有一个变量DirtyChars = c(',','。',';','?','/','','`','[','','','','','' '''','''',':','>','<','|',' - ','_','=','+','(',')','^' ','{','}','〜','\'','*','&','%','$','!','@','#')以及我(DirtyChars,sep =“|”)或粘贴(“[”,implode(DirtyChars,sep =“|”)),然后将这些正则表达式转换成一个正则表达式, “]” 09月=“”)只有一个,实际工作,因为这些不

+0

我不确定你的意思是动态的。 DirtyChars变量就是这样,但我想在将来我可以找到更多特殊字符来创建问题。这就是说,我会很高兴,只是有一种方式,这个列表喜欢它永远不会改变 – N1h1l1sT

回答

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] "[,.;?/\\\\`[\\]\":><|\\-_=+()\\^{}~'*&%[email protected]#]" 
gsub(pattern, "", s, perl=TRUE) 
## [1] "word" 

查看R demo

escape_for_char_class函数转义必须在字符类中的正则表达式PCRE可以躲过^\-]字符。然后,该模式使用[...]构建,它们构成一个与类中定义的任何字符相匹配的字符类。最后一行gsub必须perl=TRUE的模式是PCRE兼容使用,TRE正则表达式不支持该模式的转义字符。

+1

太谢谢你了!这正是我需要的! 我upvoted你,自然,而是因为我没有15美誉它是没有表现出。 你一直难以置信。谢谢。 – N1h1l1sT