在字符串的各部分之间提取
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]
我有一串名称,格式如下:
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]