r语言 - 提取第一个下划线之后的所有数字值



我想提取第一个下划线(_)之后的数字,但我不知道为什么只选择1个数字。

我的样本数据是:

myvec<-c("increa_0_1-1","increa_9_25-112","increa_25-50-76" )
as.numeric(gsub("(.*_){1}(\d)_.+", "\2", myvec))
[1]  0  9 NA
Warning message:
NAs introduced by coercion 

我想:

[1]  0  9 25

请帮忙吧?

说明一下。我们感兴趣的是_之后的数字。[0-9]捕获数字,而+表示我们想要匹配一行中的任意数字。(?<=_)"查看"数字后面,并确保我们只捕获前面有_的数字。

library(stringr)
str_extract(myvec, "(?<=_)[0-9]+")
[1] "0"  "9"  "25"

另一种可能的解决方案,基于stringr::str_extract:

library(stringr)
myvec<-c("increa_0_1-1","increa_9_25-112","increa_25-50-76" )
as.numeric(str_extract(myvec, "(?<=_)\d+"))
#> [1]  0  9 25

您可以使用sub(因为您将需要单个搜索和替换操作)与^[^_]*_(d+).*:

这样的模式:
myvec<-c("increa_0_1-1","increa_9_25-112","increa_25-50-76" )
sub("^[^_]*_(\d+).*", "\1", myvec)
# => [1] "0"  "9"  "25"

参见R演示和正则表达式演示。

Regex细节:

  • ^-起始字符串
  • [^_]*-匹配除_以外的任何零个或多个字符的否定字符类
  • _- a_char
  • (d+)-组1 (1指从替换模式中捕获到该组的值):一个或多个数字
  • .*-字符串的其余部分(.在TRE正则表达式中默认匹配换行符)。

如果您想提取第一个下划线之后的第一个数字,您可以使用str_match和模式_([0-9]+)的捕获组

注意重复字符类(或\d+)一次或多次。

例如

library(stringr)
myvec<-c("increa_0_1-1","increa_9_25-112","increa_25-50-76" )
str_match(myvec,  "_([0-9]+)")[,2]

输出
[1] "0" "9" "25"

查看R演示

myvec<-c("increa_0_1-1","increa_9_25-112","increa_25-50-76" )
as.numeric(gsub("[^_]*_(\d+).*", "\1", myvec))
[1]  0  9 25

相关内容

最新更新