使用r语言从字符串中提取电子邮件地址

7

这是5个Twitter用户的描述。我们的目标是从每个字符串中提取电子邮件地址。

这是我尝试过的代码,它可以工作但可能有更好的方法。 我更愿意避免使用unlist()并使用regex一次完成。我看到其他关于Python/Perl/PHP的类似问题,但没有关于R的。 我知道我可以使用grep(..., perl = TRUE),但那不应该是唯一的方法。 如果能行,当然是有帮助的。

ds <- c("#MillonMusical | #PromotorMusical | #Diseñador | Contacto :        ezequielife@gmail.com | #Instagram : Ezeqielgram | 01-11-11 |           @_MillonMusical @flowfestar", "LipGLosSTudio by: SAndry RUbio           Maquilladora PRofesional estudiande de diseño profesional de maquillaje     artistico lipglosstudio@hotmail.com/", "Medico General Barranquillero   radicado con su familia en Buenos Aires para iniciar Especialidad       Medico Quirurgica. email jaenpavi@hotmail.com", "msn =
    rdt031169@hotmail.comskype = ronaldotorres-br", "Aguante piscis /       manuarias17@gmail.com  buenos aires"
    )

ds <- unlist(strsplit(ds, ' '))
ds <- ds[grep("mail.", ds)]

> print(ds)
[1] "\t\tezequielife@gmail.com"  "lipglosstudio@hotmail.com/"
[3] "jaenpavi@hotmail.com"       "rdt031169@hotmail.comskype"
[5] "/\t\tmanuarias17@gmail.com"

希望能将这个“rdt031169@hotmail.comskype”分开,也许要求其以.com或.com.ar结尾会更合理,这符合我的工作需求。

1个回答

5
这里有一个替代方案:
> regmatches(ds, regexpr("[[:alnum:]]+\\@[[:alpha:]]+\\.com", ds))
[1] "ezequielife@gmail.com"     "lipglosstudio@hotmail.com" "jaenpavi@hotmail.com"      "rdt031169@hotmail.com"    
[5] "manuarias17@gmail.com" 

根据@Frank的评论,如果你想保留国家标识符在.com之后,就像你的例子.com.ar一样,那么请看这个:

> ds <- c(ds, "fulanito13@somemail.com.ar")  # a new e-mail address
> regmatches(ds, regexpr("[[:alnum:]]+\\@[[:alpha:]]+\\.com(\\.[a-z]{2})?", ds))
[1] "ezequielife@gmail.com"      "lipglosstudio@hotmail.com"  "jaenpavi@hotmail.com"       "rdt031169@hotmail.com"     
[5] "manuarias17@gmail.com"      "fulanito13@somemail.com.ar"

+1,尽管您要丢弃. com之后的任何内容,例如.com.ar(正如OP所提到的)。 - Frank
1
想法是保留.com和.com.ar,但这已经足够让我尝试了!非常好的答案。我会在几分钟内接受它。 - marbel
1
对于额外的步骤... jilbex <- "[[:alnum:]]+\\@[[:alpha:]]+\\.com"; newex <- paste(jilbex,'(\\.(ar|bah))?',sep=''); ds2 <- c(ds,'you@here.com.ar');regmatches(ds2,regexpr(newex,ds2)) 其中 "bah" 可能是您想要捕获的其他后缀。 - Frank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接