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 演示。如果您对这些正则表达式使用 sub
或 gsub
并不重要,它们的工作方式相同,尽管 sub
更合乎逻辑,因为您需要的只是将整个字符串替换为值第一个捕获组。
详情
^
- 字符串开头
[^:]*
- :
以外的零个或多个字符
:
- 冒号
\s*
- 零个或多个空格
[^.]+
- 一个或多个除点以外的字符
\.
- 一个点
\s*
- 零个或多个空格
([^.]+)
- 捕获第 1 组:一个或多个点以外的字符
.*
- 字符串的其余部分。
拜托,我想使用 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 演示。如果您对这些正则表达式使用 sub
或 gsub
并不重要,它们的工作方式相同,尽管 sub
更合乎逻辑,因为您需要的只是将整个字符串替换为值第一个捕获组。
详情
^
- 字符串开头[^:]*
-:
以外的零个或多个字符
:
- 冒号\s*
- 零个或多个空格[^.]+
- 一个或多个除点以外的字符\.
- 一个点\s*
- 零个或多个空格([^.]+)
- 捕获第 1 组:一个或多个点以外的字符.*
- 字符串的其余部分。