【问题标题】:Extract e-mail address from string using r使用 r 从字符串中提取电子邮件地址
【发布时间】:2013-11-22 16:29:57
【问题描述】:

这是 5 个 Twitter 用户描述。这个想法是从每个字符串中提取电子邮件。

这是我尝试过的代码,它可以工作,但可能有更好的东西。 我宁愿避免使用 unlist() 并使用正则表达式一次性完成。我已经看到了其他关于 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 结尾,这对我正在做的事情是有意义的

【问题讨论】:

    标签: regex string r perl


    【解决方案1】:

    这是另一种选择:

    > 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 所述)。
    • 这个想法太保留 .com 和 .com.ar,但这足以让我尝试一下!很好的答案。我会在几分钟内接受它
    • 对于额外的步骤...jilbex &lt;- "[[:alnum:]]+\\@[[:alpha:]]+\\.com"; newex &lt;- paste(jilbex,'(\\.(ar|bah))?',sep=''); ds2 &lt;- c(ds,'you@here.com.ar');regmatches(ds2,regexpr(newex,ds2)) 其中“bah”可能是您想要捕获的其他一些后缀。
    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多