提取R字符串中“-”和“-”之间的子字符串

k5hmc34c  于 2022-12-20  发布在  其他
关注(0)|答案(4)|浏览(187)

我有一个字符串列表,如下所示:
第一个月
对于列表中的每个字符串,我需要提取“-”和“-”之间的数字
所以我会得到:
[10139833,10139832]
我试过这个:
gsub(".*[-]([^-]+)[-]", "\\1", list
但它返回:
[ac,bf]
我能做些什么来让它工作?谢谢

ljsrvy3e

ljsrvy3e1#

使用stringr中的str_extract,我们可以尝试:

list <- c("chr21-10139833-A-C", "chry-10139832-b-f")
nums <- str_extract(list, "(?<=-)(\\d+)(?=-)")
nums

[1] "10139833" "10139832"

我们也可以使用sub作为基本R选项:

list <- c("chr21-10139833-A-C", "chry-10139832-b-f")
nums <- sub(".*-(\\d+).*", "\\1", list)
nums

[1] "10139833" "10139832"
sigwle7e

sigwle7e2#

您可以使用str_split_i来取得第i个分割字串:

library(stringr)
str <- c("chr21-10139833-A-C", "chry-10139832-b-f")

str_split_i(str, "-", i = 2)
#[1] "10139833" "10139832"
kyvafyod

kyvafyod3#

**1)**使用最后的注解中显示的输入,使用read.table。如果您希望字符输出,请将colClasses = "character"参数添加到read.table

read.table(text = x, sep = "-")[[2]]
## [1] 10139833 10139832

**2)**另一种可能性是使用strapply。如果您想要字符输出,则省略as.numeric参数。

library(gsubfn)
strapply(x, "-(\\d+)-", as.numeric, simplify = TRUE)
## [1] 10139833 10139832

注解

x <- c("chr21-10139833-A-C", "chry-10139832-b-f")
szqfcxe2

szqfcxe24#

如果字符串的结构和字符总是像单词字符和连字符那样,那么可以在单词边界之间匹配1+个数字:

library(stringr)
list <- c("chr21-10139833-A-C", "chry-10139832-b-f")
str_extract(list, "\\b\\d+\\b")

或者对于类似perl的模式和\K,您也可以使用

list <- c("chr21-10139833-A-C", "chry-10139832-b-f")
regmatches(list, regexpr("-\\K\\d+(?=-)", list, perl = TRUE))

两者都将输出:

[1] "10139833" "10139832"

相关问题