如何提取两个字符串之间的数字?

Dil*_*lon 2 regex r stringr stringi

我有一个像下面的向量

id < c("1250.3000488281_-57.882898769379_OilA")
Run Code Online (Sandbox Code Playgroud)

我需要提取_之后的数字,即-57.882898769379。

我尝试过这样的事情

library(magrittr)
id_play %>%
    stringr::str_extract(.,"(?<=[[:punct:]])([0-9]+)(?=_Oil)")
Run Code Online (Sandbox Code Playgroud)

而不是得到-57。----我在“。”之后得到了所有东西。,即““ 882898769379”。

如何排除后缀不包含标点符号“。”?

akr*_*run 6

一个选项,sub用于捕获后面的一个或多个数字,_ 并用\\1捕获的组的向后引用()代替

sub(".*_(-?[0-9.]+)_.*", "\\1", id)
#[1] "-57.882898769379"
Run Code Online (Sandbox Code Playgroud)