【发布时间】:2019-04-05 00:50:58
【问题描述】:
R 正则表达式问题:我有一个职位和职位描述的数据框,我需要
1) 检查职位描述是否包含电子邮件地址(可以是 .org、.edu、.gov、.com),以及
2) 提取电子邮件地址和电子邮件地址前面的 5 个单词
数据集可以包含可以以 .edu、.com 等结尾的网址,还可以包含返回。基本上,我希望将电子邮件地址识别为具有 [letters/numbers]@[letters/numbers](.org、.edu、.gov、.com 以及电子邮件可以结尾的任何其他内容)的任何内容
这是一个示例数据集:
teststr = data.frame(job_title = c(1:8),
job_description = c('please send your resumes to adsf@dsf.com apply now!',
'asdfa@asdf.com/adsf asdf',
'visit us at sfds@adfa',
'apply now',
'follow us on @asdf.gov',
'asdfa.gov',
'.com',
''))
> teststr
job_title job_description
1 1 please send your resumes to adsf@dsf.com apply now!
2 2 asdfa@asdf.com/adsf asdf
3 3 visit us at sfds@adfa
4 4 apply now
5 5 follow us on @asdf.gov
6 6 asdfa.gov
7 7 .com
8 8
我尝试了 (1),但得到了错误的答案
grepl('(*@.+\\.com)|(*@\\S\\.gov)', teststr$job_description)
(1)的正确结果应该是
TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
【问题讨论】:
-
这变成了一个问题,即您希望如何具体匹配特定的电子邮件地址模式,但这应该可以
grepl('(.+@.+\\.com)|(.+@.+\\.gov)', teststr$job_description) -
每个模式都以
.+开头,因为任何电子邮件地址都需要在@之前至少有一个字符