我意识到这个问题对于大多数正则表达式大师来说可能看起来很简单,但是回顾类似的问题并没有产生解决方案。
我有一个名为email
的电子邮件地址向量,并希望在每个文本的最后一段时间后提取文本。为了举例,
email<-c("xxxxx1@xxx.com", "xxxx2@xxx.edu", "xxxxx3@xxx.co.uk")
我试过了:
grep("[\.][a-zA-Z]*?$", email, value=T)
这会收到错误消息:
错误:&#39;。&#39;是字符串开头的一个无法识别的转义&#34;&#34;&#34;`
另一方面删除转义字符
grep("[.][a-zA-Z]*?$", email, value=T)
返回整个电子邮件地址,如下所示:
grep("\\.[a-zA-Z]*$", email, perl=T, value=T)
我非常感谢此时的帮助。
答案 0 :(得分:12)
如果您需要在最后一个句点(.
)之后提取字符串,请尝试使用sub
sub('.*\\.', '', email)
#[1] "com" "com"
email <- c('akrun.123@gmail.com', 'xxx$xxxx.com')
答案 1 :(得分:7)
尝试
email <- c("michael.chirico@some.isp.com", "xxx@xxxx.com")
sapply(strsplit(email, split= "\\."), function(x) x[length(x)])
# [1] "com" "com"
这个更短但我觉得它会慢一点:
sapply(strsplit(email, split="\\."), tail, 1L)
另外,正如@RichardScriven所指出的那样,tools
为你特别想要做的事情量身定制了一个功能:
library(tools)
file_ext(email)
# [1] "com" "com"