在字符串中的最后一个句点后提取文本

use*_*555 12 regex r

我意识到这个问题对于大多数正则表达式大师来说可能看起来很简单,但是回顾类似的问题并没有产生解决方案.

我有一个电子邮件地址向量,email并希望在每个文本的最后一段时间后提取文本.为了举例,

email<-c("xxxxx1@xxx.com", "xxxx2@xxx.edu", "xxxxx3@xxx.co.uk")
Run Code Online (Sandbox Code Playgroud)

我试过了:

grep("[\.][a-zA-Z]*?$", email, value=T)
Run Code Online (Sandbox Code Playgroud)

这让我得到错误信息:

错误:'.' 是一个无法识别的转义字符串开头""."`

另一方面,删除转义字符

grep("[.][a-zA-Z]*?$", email, value=T)
Run Code Online (Sandbox Code Playgroud)

返回整个电子邮件地址,如下所示:

grep("\\.[a-zA-Z]*$", email, perl=T, value=T)
Run Code Online (Sandbox Code Playgroud)

在这一点上我非常感谢你的帮助.

akr*_*run 15

如果你需要在最后一个句点(.)之后提取字符串,请尝试使用sub

sub('.*\\.', '', email)
#[1] "com" "com"
Run Code Online (Sandbox Code Playgroud)

数据

email <- c('akrun.123@gmail.com', 'xxx$xxxx.com')
Run Code Online (Sandbox Code Playgroud)


Mic*_*ico 7

尝试

email <- c("michael.chirico@some.isp.com", "xxx@xxxx.com")
sapply(strsplit(email, split= "\\."), function(x) x[length(x)])

# [1] "com" "com"
Run Code Online (Sandbox Code Playgroud)

这个更短但我觉得它会慢一点:

sapply(strsplit(email, split="\\."), tail, 1L)
Run Code Online (Sandbox Code Playgroud)

另外,正如@RichardScriven所指出的那样,tools它具有量身定制的功能,专门针对您要做的事情:

library(tools)
file_ext(email)
# [1] "com" "com"
Run Code Online (Sandbox Code Playgroud)