Мы можем захватить как группу путем сопоставления символов, отличных от .
([^.]+
) от начала (^
) строки, за которыми следует точка (\\.
), а затем захватить все символы между первую и третью точку, при замене используйте обратную ссылку (\\1
) захваченной группы ((...)
)
sub("^[^.]+\\.([^.]+\\.[^.]+)\\..*", "\\1", s)
#[1] "0.0" "0.02" "0.1"
Или это также можно сделать с помощью substr
после получение положения точек
lst1 <- gregexpr('.', s, fixed = TRUE)
substring(s, sapply(lst1, `[`, 1) + 1, sapply(lst1, `[`, 3) - 1)
#[1] "0.0" "0.02" "0.1"