我有一个字符串列表,如下所示:第一个月对于列表中的每个字符串,我需要提取“-”和“-”之间的数字所以我会得到:[10139833,10139832]我试过这个:gsub(".*[-]([^-]+)[-]", "\\1", list但它返回:[ac,bf]我能做些什么来让它工作?谢谢
[10139833,10139832]
gsub(".*[-]([^-]+)[-]", "\\1", list
[ac,bf]
ljsrvy3e1#
使用stringr中的str_extract,我们可以尝试:
stringr
str_extract
list <- c("chr21-10139833-A-C", "chry-10139832-b-f") nums <- str_extract(list, "(?<=-)(\\d+)(?=-)") nums [1] "10139833" "10139832"
我们也可以使用sub作为基本R选项:
sub
list <- c("chr21-10139833-A-C", "chry-10139832-b-f") nums <- sub(".*-(\\d+).*", "\\1", list) nums [1] "10139833" "10139832"
sigwle7e2#
您可以使用str_split_i来取得第i个分割字串:
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"
kyvafyod3#
**1)**使用最后的注解中显示的输入,使用read.table。如果您希望字符输出,请将colClasses = "character"参数添加到read.table。
read.table
colClasses = "character"
read.table(text = x, sep = "-")[[2]] ## [1] 10139833 10139832
**2)**另一种可能性是使用strapply。如果您想要字符输出,则省略as.numeric参数。
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")
szqfcxe24#
如果字符串的结构和字符总是像单词字符和连字符那样,那么可以在单词边界之间匹配1+个数字:
library(stringr) list <- c("chr21-10139833-A-C", "chry-10139832-b-f") str_extract(list, "\\b\\d+\\b")
或者对于类似perl的模式和\K,您也可以使用
\K
list <- c("chr21-10139833-A-C", "chry-10139832-b-f") regmatches(list, regexpr("-\\K\\d+(?=-)", list, perl = TRUE))
两者都将输出:
[1] "10139833" "10139832"
4条答案
按热度按时间ljsrvy3e1#
使用
stringr
中的str_extract
,我们可以尝试:我们也可以使用
sub
作为基本R选项:sigwle7e2#
您可以使用
str_split_i
来取得第i
个分割字串:kyvafyod3#
**1)**使用最后的注解中显示的输入,使用
read.table
。如果您希望字符输出,请将colClasses = "character"
参数添加到read.table
。**2)**另一种可能性是使用
strapply
。如果您想要字符输出,则省略as.numeric
参数。注解
szqfcxe24#
如果字符串的结构和字符总是像单词字符和连字符那样,那么可以在单词边界之间匹配1+个数字:
或者对于类似perl的模式和
\K
,您也可以使用两者都将输出: