我正在尝试使用stringr库从一个大而混乱的文件中提取电子邮件。
str_match不允许perl = TRUE,我无法找出转义字符以使其工作。
有人可以推荐一个相对强大的正则表达式,它可以在下面的上下文中使用吗?
c("larry@gmail.com", "larry-sally@sally.com", "larry@sally.larry.com")->emails
"SomeRegex"->regex
str_match(emails, regex)
答案 0 :(得分:5)
> "^[[:alnum:].-_]+@[[:alnum:].-]+$"->regex
> str_match(emails, regex)
[,1]
[1,] "larry@gmail.com"
[2,] "larry-sally@sally.com"
[3,] "larry@sally.larry.com"
@ -sign不需要在正则表达式中转义。并且“。”而“ - ”在字符类中并不特殊。如果要添加“.com”,“。co”,“。edu”,“。org”的要求,则应指定该列表的完整程度。
正如M42所指出的,这不是一种万无一失的方法。事实上,据称没有确定的方法:Using a regular expression to validate an email address
答案 1 :(得分:1)
我发现这个正则表达式对我来说效果更好:
^[[:alnum:]._-]+@[[:alnum:].-]+$
Dash在字符类中具有特殊含义,除非它是最后一个字符。它是一个范围运算符,如“A-Z”
答案 2 :(得分:0)
实际上,我建议您使用更长的正则表达式,因为上述解决方案允许使用带有结尾点的test@test.com.
之类的电子邮件。
isMail <- function(x){
grepl("^[[:alnum:]._-]+@[[:alnum:].-]+$", x))
}