【问题标题】:Extracting text after last period in string [duplicate]在字符串的最后一个句点之后提取文本[重复]
【发布时间】:2015-08-02 16:36:36
【问题描述】:

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

我有一个名为email 的电子邮件地址向量,并希望在每个电子邮件地址的最后一个句点之后提取文本。举例来说,

email<-c("xxxxx1@xxx.com", "xxxx2@xxx.edu", "xxxxx3@xxx.co.uk")

我试过了:

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

这让我得到错误消息:

错误:“。”是从“”开始的字符串中无法识别的转义。”`

另一方面,删除转义字符

grep("[.][a-zA-Z]*?$", email, value=T)

按原样返回整个电子邮件地址:

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

在这一点上,我非常感谢您的帮助。

【问题讨论】:

  • 你能举一些例子来测试吗?
  • 喜欢一个示例电子邮件地址吗?试试xxx@xxxx.com 理想情况下,解决方案只会产生.com
  • 您需要使用gsubsub 而不是grepi.e。 sub('.*\\.', '', email)
  • str_extract(a, "[^.]*$")
  • 感谢 Akrun 和 Avinash,他们都工作得很好。

标签: regex r


【解决方案1】:

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

sub('.*\\.', '', email)
#[1] "com" "com"

数据

email <- c('akrun.123@gmail.com', 'xxx$xxxx.com')

【讨论】:

【解决方案2】:

试试

email <- c("michael.chirico@some.isp.com", "xxx@xxxx.com")
sapply(strsplit(email, split= ".", fixed = TRUE), tail, 1L)

# [1] "com" "com"

另外,正如@RichardScriven 所指出的,tools 具有针对您具体尝试做的事情的量身定制的功能:

library(tools)
file_ext(email)
# [1] "com" "com"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2023-02-23
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多