我想提取第一個下劃線之后的數字(_),但我不知道為什么只選擇了 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
請問,有什么幫助嗎?
uj5u.com熱心網友回復:
一些解釋。我們對 之后的數字感興趣_。[0-9]捕獲數字,其中 表示我們要匹配一行中的任意數量的數字。(?<=_)“查看”數字并確保我們只捕獲前面有 a 的數字_。
library(stringr)
str_extract(myvec, "(?<=_)[0-9] ")
[1] "0" "9" "25"
uj5u.com熱心網友回復:
另一種可能的解決方案,基于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
uj5u.com熱心網友回復:
您可以使用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 演示和正則運算式演示。
正則運算式詳細資訊:
^- 字串的開始[^_]*- 一個否定字符類,匹配任何零個或多個字符,除了__- 一個_字符(\d )- 第 1 組(\1指從替換模式中捕獲到該組中的值):一位或多位數字.*- 字串的其余部分(.在 TRE 正則運算式中默認匹配換行符)。
uj5u.com熱心網友回復:
myvec<-c("increa_0_1-1","increa_9_25-112","increa_25-50-76" )
as.numeric(gsub("[^_]*_(\\d ).*", "\\1", myvec))
[1] 0 9 25
uj5u.com熱心網友回復:
如果要提取第一個下劃線后的第一個數字,可以使用帶有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 演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/491482.html
