gsub 从 R 中的向量中提取点前后的字符串?

gsub to extract string before and after dots from a vector in R?

拜托,我想使用 gsub 从这个向量中提取字符串:

x<-("Prayer: Lord. Have mercy on.")

期望的输出分别是“主”和“怜悯”。

我试过gsub('.*:(.*)','\1',x)但是没有单独给他们。

您可以在删除前导 Prayer: 项后尝试在 \.\s* 上拆分。

x <- "Prayer: Lord. Have mercy on."
parts <- strsplit(sub("^\w+:\s*", "", x), "\.\s*")[[1]]
parts

[1] "Lord"          "Have mercy on"

如果需要分别获取这两个值,可以使用

x <- c("Prayer: Lord. Have mercy on.")
gsub("^[^:]*:\s*([^.]+).*","\1",x)
## => [1] "Lord"
gsub("^[^:]*:\s*[^.]+\.\s*([^.]+).*","\1",x)
## => [1] "Have mercy on"

查看 R demo online, regex #1 and regex #2 演示。如果您对这些正则表达式使用 subgsub 并不重要,它们的工作方式相同,尽管 sub 更合乎逻辑,因为您需要的只是将整个字符串替换为值第一个捕获组。

详情

  • ^ - 字符串开头
  • [^:]* - :
  • 以外的零个或多个字符
  • : - 冒号
  • \s* - 零个或多个空格
  • [^.]+ - 一个或多个除点以外的字符
  • \. - 一个点
  • \s* - 零个或多个空格
  • ([^.]+) - 捕获第 1 组:一个或多个点以外的字符
  • .* - 字符串的其余部分。