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

用于标识电子邮件地址的Base R Regex中的正则表达式,regex,r,stringr,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) @-符号不需要在正则表达式中转义。和“

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

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

有人能推荐一个相对健壮的正则表达式在下面的上下文中工作吗

c("larry@gmail.com", "larry-sally@sally.com", "larry@sally.larry.com")->emails
"SomeRegex"->regex
str_match(emails, regex)
@-符号不需要在正则表达式中转义。和“.”和“-”在字符类中并不特殊。如果您想添加对“.com”、“.co”、“.edu”、“.org”的要求,那么您应该指定该列表的完整程度


正如M42所指出的,这不是一种可靠的方法。事实上,据说没有可靠的方法:

我发现这个正则表达式更适合我:

^[[:alnum:]._-]+@[[:alnum:].-]+$

破折号在字符类中有特殊含义,除非它是最后一个字符。它是一个范围操作符,就像在“a-Z”中一样。实际上,我建议使用更长的正则表达式,因为上面的解决方案允许使用类似
test@test.com.
带有尾随点


isMail嗯,你对Regex的最佳猜测是什么?此外,我认为您的示例应该包括您不希望匹配的案例。我可以用
*
匹配所有这些,对吗?如果我使用
grep(“@”,email)
,它会正确匹配。而且,
stru\u match
会提取第一个匹配的组。这是您想要的还是要提取所有匹配的组?在
R
中,grep通常将多个字符串的向量与一个字符串进行匹配regexp@hwnd我觉得这就是OP想要的。它会匹配
。@-
是的,会的。我对这个问题的理解是,发问者需要一个开始,包括对regex元字符的讨论。toomey8没有提供一个包含需要拒绝的项目的测试用例。这个答案对我来说很有用,但对于后代来说,值得一提的是,我已经转向Python,因为更广泛的支持和通用库带来了很多任务(解析xml、连接到Google分析、连接到Google电子表格、从URL中获取tld)更容易,而且随着熊猫的出现,在Python上工作似乎更有效。。。。这在很多情况下都不起作用,包括,例如,带有两个星号的东西……它应该是“``”^[[:alnum:..[:alnum:.-]+@[:alnum:.-]+[:alnum:::+$”``然后呢?
^[[:alnum:]._-]+@[[:alnum:].-]+$