r - 使用 R 从带有点和数字的字符串中获取电子邮件
问题描述
我有以下字符串theText <- "one123.4@xyz.eu, name.name2@abc.com, ton.mar_Xe@xyz.uk, xxx_yyy_123@opq.edu"
我想获取电子邮件地址。我无法收到第一封电子邮件,而无法收到另一封我写的:
theText <- "one123.4@xyz.eu, name.name2@abc.com, ton.mar_Xe@xyz.uk, xxx_yyy_123@opq.edu"
emailsTT = regmatches(theText, gregexpr("([_+a-zA-Z0-9-]+(\\.[_+a-zA-Z0-9-][a-zA-Z0-9._-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,14}))", theText))
emailsTT
结果是:
"4@xyz.eu" "name.name2@abc.com" "ton.mar_Xe@xyz.uk" "xxx_yyy_123@opq.edu"
如您所见,第一个结果不正确。
任何建议。
谢谢
解决方案
假设您的 CSV 字符串仅包含电子邮件地址,那么简单的字符串拆分会更容易:
theText <- "one123.4@xyz.eu, name.name2@abc.com, ton.mar_Xe@xyz.uk, xxx_yyy_123@opq.edu"
emails <- strsplit(theText, ",\\s*")[[1]]
emails
[1] "one123.4@xyz.eu" "name.name2@abc.com" "ton.mar_Xe@xyz.uk"
[4] "xxx_yyy_123@opq.edu"
编辑:
如果您需要从较大的文本中获取这些电子邮件地址,那么可以使用一个简单的正则表达式模式:
\b\S+@\S+\.\S+\b
我们可以尝试regmatches
与regexpr
此处一起使用作为基本 R 解决方案:
regmatches(theText, gregexpr("\\b\\S+@\\S+\\.\\S+\\b", theText))[[1]]
[1] "one123.4@xyz.eu" "name.name2@abc.com" "ton.mar_Xe@xyz.uk"
[4] "xxx_yyy_123@opq.edu"