首页 > 解决方案 > 使用 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"

如您所见,第一个结果不正确。

任何建议。

谢谢

标签: rstringemail

解决方案


假设您的 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

我们可以尝试regmatchesregexpr此处一起使用作为基本 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"

推荐阅读