请考虑以下电子邮件矢量:
emails <- c("blah@my.blah.com;etc@etc.edu;me@me.gov",
"yay@something.gov;yes@my.blah.com;maybe@maybe.net",
"someemail@nothing.gov")
上面向量的每个元素都是用分号分隔的用户电子邮件地址字符串。例如,在这种情况下,第一个用户有三封电子邮件:blah@my.blah.com
,etc@etc.edu
和me@me.gov
。
我有一个感兴趣的特定域名-假设它是my.blah.com
。我也知道,鉴于我对这个问题的专业知识,每个用户只能有一个my.blah.com
电子邮件地址(如果存在)。我想为每个用户返回此电子邮件地址作为字符向量,并在不存在NA
电子邮件地址的情况下返回my.blah.com
。
因此,输出应为
c("blah@my.blah.com", "yes@my.blah.com", NA)
我对此的最佳尝试是
emails <- c("blah@my.blah.com;etc@etc.edu;me@me.gov",
"yay@something.gov;yes@my.blah.com;maybe@maybe.net",
"someemail@nothing.gov")
regmatches(emails,
regexec("+.*@my.blah.com",
emails))
[[1]]
[1] "blah@my.blah.com"
[[2]]
[1] "yay@something.gov;yes@my.blah.com"
[[3]]
character(0)
这不是字符向量,但我现在正努力使RegEx正确,这是我要关注的重点。
答案 0 :(得分:2)
我们可以在";"
上拆分字符串,然后将grep
与pattern
结尾的"my.blah.com"
一起使用,并返回value
进行匹配。
sapply(strsplit(emails, ";"), grep, pattern = "@my\\.blah\\.com$", value = TRUE)
#[[1]]
#[1] "blah@my.blah.com"
#[[2]]
#[1] "yes@my.blah.com"
#[[3]]
#character(0)
答案 1 :(得分:2)
这是使用id
-----------
1
2
3
4
5
6
的一种方法,与您尝试做的事情类似:
regmatches
答案 2 :(得分:2)
带有str_extract
library(stringr)
str_extract_all(emails, "\\w+@my\\.blah\\.com")
#[[1]]
#[1] "blah@my.blah.com"
#[[2]]
#[1] "yes@my.blah.com" "stuff@my.blah.com"
#[[3]]
#character(0)
如果我们只需要一个电子邮件地址
str_extract(emails, "\\w+@my\\.blah\\.com")
#[1] "blah@my.blah.com" "yes@my.blah.com" NA