R 在字符串的各个部分之间提取

R 在字符串的各个部分之间提取,r,extract,gsub,R,Extract,Gsub,我有以下格式的名称字符串: names <- c("Q-1234-1", "Q-1234-2", "Q-1234-1-8", "Q-1234-2-8") 我假设我需要使用sub/gsub,但不确定从哪里开始。有什么建议吗?我们可以使用sub来匹配从一开始(^)就不是-([^-]*)的零个或多个字符的模式字符串后跟一个-,后跟零个或多个非-字符,后跟一个-,后面的数字被捕获为一个组。在替换中,我们使用捕获组的反向引用(\\1) 或者可以将其修改为 as.integer(sub("^([^

我有以下格式的名称字符串:

names <- c("Q-1234-1", "Q-1234-2", "Q-1234-1-8", "Q-1234-2-8")

我假设我需要使用sub/gsub,但不确定从哪里开始。有什么建议吗?

我们可以使用
sub
来匹配从一开始(
^
)就不是
-
[^-]*
)的零个或多个字符的模式字符串后跟一个
-
,后跟零个或多个非
-
字符,后跟一个
-
,后面的数字被捕获为一个组。在替换中,我们使用捕获组的反向引用(
\\1


或者可以将其修改为

as.integer(sub("^([^-]*-){2}(\\d).*", "\\2", names))
#[1] 1 2 1 2

下面是使用
stringr

library("stringr")
names <- c("Q-1234-1", "Q-1234-2", "Q-1234-1-8", "Q-1234-2-8")
output = str_split_fixed(names, pattern = "-", n = 4)[,3]
库(“stringr”)
名字
as.integer(sub("^([^-]*-){2}(\\d).*", "\\2", names))
#[1] 1 2 1 2
library("stringr")
names <- c("Q-1234-1", "Q-1234-2", "Q-1234-1-8", "Q-1234-2-8")
output = str_split_fixed(names, pattern = "-", n = 4)[,3]