我在 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/