R gsub 从文本中提取电子邮件

Pav*_*ive 4 regex r gsub

我有一个areadLines包含一些电子邮件的文件创建的变量。我已经只过滤了那些带有@ 符号的行,现在正在努力获取电子邮件。我的变量中的文本如下所示:

> dput(a[1:5])
c("buenas tardes. excelente. por favor a: Saolonm@hotmail.com", 
"26.leonard@gmail.com ", "Aprecio tu aporte , mi correo es jcdavola31@gmail.com , Muchas Gracias", 
"gracias andrescarnederes@headset.cl", "Me apunto, muchas gracias mi dirección luciana.chavela.ecuador@gmail.com me será de mucha utilidad. "
)
Run Code Online (Sandbox Code Playgroud)

从SO 中的这个问题中,我得到了一个提取电子邮件的起点(@Aaron Haurun 的回答),该方法略有修改(我[\w.]@地址.之间添加了一个名称之间的电子邮件)在 regex101.com 中可以很好地提取电子邮件。但是,当我将它移植到gsub

> gsub("()(\\w[\\w.]+@[\\w.-]+|\\{(?:\\w+, *)+\\w+\\}@[\\w.-]+)()", 
       "\\2", 
       a[1:5], 
       perl = FALSE) ## It doesn't matter if I use perl = TRUE

[1] "buenas tardes. excelente. por favor a: Saolonm@hotmail.com"           "26.leonard@gmail.com "                                                                          
[3] "Aprecio tu aporte , mi correo es jcdavola31@gmail.com , Muchas Gracias"                           "gracias andrescarnederes@headset.cl"                                                                       
[5] "Me apunto, muchas gracias mi dirección luciana.chavela.ecuador@gmail.com me será de mucha utilidad. "
Run Code Online (Sandbox Code Playgroud)

我做错了什么,如何获取这些电子邮件?谢谢!

Psi*_*dom 5

我们可以试试str_extract()fromstringr包:

str_extract(text, "\\S*@\\S*")

[1] "Saolonm@hotmail.com"              
[2] "26.leonard@gmail.com"             
[3] "jcdavola31@gmail.com"             
[4] "andrescarnederes@headset.cl"      
[5] "luciana.chavela.ecuador@gmail.com"
Run Code Online (Sandbox Code Playgroud)

where\\S*匹配任意数量的非空格字符。