2017-05-30 38 views
0

我有以下数据如何识别没有英文字母,数字和“_”的字符串并替换剩下的字符?

s <- c("コハニー", "Cat", "Blue", "زبان","D-1") 

我希望排除那些没有在英文字母和喜欢的东西“ABC”替换他们的数据。所以我理想输出

"ABC" "Cat" "Blue" "ABC" "D-1" 

我用下面的代码,但它无法识别_-。如何在Regex中澄清_-

s[!grepl('^[A-Za-z0-9_]+$', s)] <- 'ABC' 

这给了我:

ABC" "Cat" "Blue" "ABC" "ABC" 

回答

1

你只需要在末尾添加-_,所以它应该是'^[A-Za-z0-9_-]+$

我总是发现regexr.com成为检验出真正有用的这些问题和更多关于正则表达式的知识。

s <- c("????", "Cat", "Blue", "????","D-1") 

s[!grepl('^[A-Za-z0-9\\_\\-]+$', s)] <- 'ABC' 

s 
#> [1] "ABC" "Cat" "Blue" "ABC" "D-1" 
+1

小注意:在某些情况下,你不需要加倍\逃避 - 和_就像这里:s [!grepl('^ [[:alnum:] _-] + $',s)] < - '' – GlennFriesen

+0

谢谢,我没有意识到这一点。刚刚更新了答案 – austensen

+1

本来会添加“[[:punct:]”以保留所有ASCII标点符号。 –

3

为了增强可读性,我建议使用[:alnum:]赶上字母数字字符,其次是要保持明确的非字母数字字符(如“_-”),像这样:

s <- c("コハニー", "Cat", "Blue", "زبان","D-1") 
s[!grepl('^[[:alnum:]_-]+$', s)] <- '' 
s 
2

您可以直接在您的角色类中添加_-(无需转义)。连字符-并不需要进行转义如果在课堂上,即第一个或最后一个字符

[A-Za-z0-9_-] 

所以,你可以试试这个:

s[!grepl('^[A-Za-z0-9_-]+$', s)] <- 'ABC' 

看看这个R Demo

相关问题