我在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与正确的电子邮件完全匹配吗?谢谢一堆!
你已经被告知使用星号量词没有给你你需要的特异性,所以使用"+"量词,它强制至少一个这样的匹配.我决定通过添加一些有重复符号的地方来使问题更复杂:
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指出,添加"^"
作为模式中的第一个字符(表示潜在匹配的第一个字符之前的点)会阻止允许匹配初始"@@"的项目.