r语言 - 如何识别那些没有英文字母、数字和"_"的字符串并替换其余的?



我有以下数据

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"

最新更新