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

时间:2017-07-11 15:26:09

标签: r extract gsub

我有以下格式的一串名字:

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

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

1, 2, 1, 2

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

2 个答案:

答案 0 :(得分:1)

我们可以使用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

答案 1 :(得分:0)

这是使用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]