r - R - 如何在两个字符串之间提取数字?

我有一个像下面的向量


id < c("1250.3000488281_-57.882898769379_OilA")



我需要提取_后面的数字,换句话说,-57.882898769379.

我尝试了这样的方法


library(magrittr)


id_play %>%


 stringr::str_extract(.,"(?<=[[:punct:]])([0-9]+)(?=_Oil)")



我得到了 "."之后的所有内容,即882898769379,而不是得到-57。

如何排除标点“ .”?

时间:

在_后使用sub,捕获一个或多个数字,并且替换为所捕获组的反向引用(1 )的选项


sub(".*_(-?[0-9.]+)_.*","1", id)


#[1]"-57.882898769379"



只需用下划线替换[[:punct:]]


"(?<=_)(-?[0-9.]+)(?=_Oil)"



使用strsplit(),然后提取每个记录的第二个元素。


vapply(strsplit(id,"_"), `[[`, character(1), 2)




id_play %>%


 str_extract(.,"(?<=[[:punct:]])([0-9,.,-]+)(?=_Oil)")



...