【发布时间】:2016-01-07 13:46:28
【问题描述】:
我正在尝试从 csv 中删除“不良”电子邮件地址。我有一列电子邮件,看起来像“abd@no.com”、“123@none.com”、“@”或“a”。电子邮件格式种类繁多,因此我想尝试将它们全部查找并删除。
我最初的想法是严格查看电子邮件字符串的末尾 - “@...”部分。然后还要看一个字符的长度,所以如果邮件的长度只有 1 或 2 是无效的。
如果我有一个坏邮件列表,我想生成一个新的电子邮件列表,其中坏邮件被替换为 NA。
以下是我目前拥有的代码,但它不起作用并在模式上查找完全匹配,而不仅仅是字符串的结尾。
email_clean <- function(email, invalid = NA)
{
email <- trimws(email) # remove whitespace
email[nchar(email) %in% c(1,2)] <- invalid
bad_email <- c("\\@no.com", "\\@none.com","\\@email.com","\\@noemail.com")
pattern = paste0("(?i)\\b",paste0(bad_email,collapse="\\b|\\b"),"\\b")
emails <-gsub(pattern,"",sapply(csv_file$Email,as.character))
email
}
Cleaned_Email <- email_clean(csv_file$Email)
感谢您的帮助!!!
【问题讨论】:
-
你为什么要逃避
@?此外,您最好避开点(例如no\\.com)。请记住,模式no.com与no.com匹配,但也与noRcom或no com匹配。点代表正则表达式中的任何字符。
标签: r string csv pattern-matching