r - 使用 R 匹配电子邮件格式

标签 r pattern-matching

我在 datacamp.com 上了介绍课,遇到了一个问题。

目标:使用 grep 找到正确的电子邮件。 “正确的电子邮件”定义为“@”,以“.edu”结尾。

电子邮件向量:

emails <- c("john.doe@ivyleague.edu", "education@world.gov", "dalai.lama@peace.org", 
        "invalid.edu", "quant@bigdatacollege.edu", "cookie.monster@sesame.tv")

我在想

grep("@*\\.edu$",emails)

它给了我

[1] 1 4 5

因为我认为“*”匹配“多个字符”。后来发现不是那么回事。

原来正确的代码是

grep("@.*\\.edu$",emails)

我用谷歌搜索了一些文档,但对如何获得正确答案只有模糊的认识。有人能解释一下 R 是如何匹配正确的电子邮件的吗?非常感谢!!

最佳答案

您已经被告知使用星号量词不能为您提供所需的特异性,因此请使用“+”量词,它至少强制进行一次这样的匹配。我决定通过添加一些重复的 at 符号来使问题变得更复杂:

emails <- c("john.doe@@ivyleague.edu", "education@@world.gov", "dalai.lama@peace.org", 
"invalid.edu", "quant@bigdatacollege.edu", "cookie.monster@sesame.tv")


grep( "^[^@]+@[^@]+\\.edu$", emails)
#[1] 5

它使用正则表达式字符类结构,其中侧方括号内的项目被视为文字,除非有一个初始的向上插入符号(“^”),在这种情况下它是字符类的否定,即在这种情况下,除“@”之外的任何字符。这也将排除 at 符号是第一个字符的情况。感谢 KonradRudolph,他指出将 "^" 添加为模式中的第一个字符(表示就在潜在匹配的第一个字符之前的点)将阻止允许带有初始 "@@"的项目"从被匹配。

关于r - 使用 R 匹配电子邮件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559720/

相关文章:

R/RStudio - 系统路径问题

r - 当列名包含空格和特殊字符时从 data.table 包中读取?

r - 创建具有向量(非标量)元素的矩阵

r - 轻松在 GitHub 上查找 R 包

计算机视觉的统计帮助

regex - Unix egrep 命令如何创建一个模式来匹配以下内容?

r - 使用 R 的事件研究设计中具有交互项的公式

haskell - 具有 `bool` 、 `either` 等功能的模式

Java 正则表达式 : Remove (double) negative look ahead and look behind

c# - 如何过滤与模式匹配的字符串列表