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

Extract Between Parts of a String

我有一串名称,格式如下:

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

我正在尝试提取第二个连字符后的个位数。在某些情况下,名称末尾会有第三个连字符和一个附加数字。所需的输出是:

1, 2, 1, 2

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

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

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

或者这个可以修改为

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]