我有以下数据
s <- c("コハニー", "Cat", "Blue", "زبان","D-1")
我希望排除那些不在英语字母中的数据,并用" ABC"之类的数据替换它们。所以我的理想输出是
"ABC" "Cat" "Blue" "ABC" "D-1"
我使用以下代码,但无法识别_
和-
。如何在正则澄清_
和-
?
s[!grepl('^[A-Za-z0-9_]+$', s)] <- 'ABC'
这给了我:
ABC" "Cat" "Blue" "ABC" "ABC"
对于可读性,我建议使用[:alnum:]捕获字母数字字符,然后是您想要保留的显式非alphanumenmeric字符(例如,例如" _--"(,:
s <- c("コハニー", "Cat", "Blue", "زبان","D-1")
s[!grepl('^[[:alnum:]_-]+$', s)] <- ''
s
您可以直接在角色类中添加 _
和 -
(而无需逃脱(。连字符-
如果它是班级中的第一个或最后一个字符,即
[A-Za-z0-9_-]
因此,您可以尝试以下方法:
s[!grepl('^[A-Za-z0-9_-]+$', s)] <- 'ABC'
看这个r demo
最后您只需要添加-
和_
,因此应该是'^[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"