Base R Regex中的正则表达式,用于标识电子邮件地址

时间:2013-10-13 03:27:17

标签: regex r stringr

我正在尝试使用stringr库从一个大而混乱的文件中提取电子邮件。

str_match不允许perl = TRUE,我无法找出转义字符以使其工作。

有人可以推荐一个相对强大的正则表达式,它可以在下面的上下文中使用吗?

c("larry@gmail.com", "larry-sally@sally.com", "larry@sally.larry.com")->emails
"SomeRegex"->regex
str_match(emails, regex)

3 个答案:

答案 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))
}