Повторите (непериоды, за которыми следует период) дважды, затем запишите непериоды, и нужная подстрока находится в этой захваченной группе:
Identifier = c("NC.1.OA", "NC.1.OA.0", "NC.1.OA.1", "NC.1.OA.1.a", "NC.1.OA.1.b",
"NC.1.OA.1.c", "NC.1.OA.2", "NC.1.OA.2.0", "NC.1.OA.3", "NC.1.OA.4"
)
gsub("(?:[^.]+\\.){2}([^.]+).*", "\\1", Identifier)
Выход:
[1] "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA"
Для уточнения, (?:[^.]+\\.)
- это группа, которая соответствует непериодическим символам, а затем одному периоду. {2}
после группы означает, что предыдущий токен (группа) повторяется дважды, то есть «непериоды, за которыми следует период, за которыми следуют непериоды, после которых следует период». Затем последний ([^.]+)
соответствует как можно большему количеству непериодических символов после второго периода, тем самым сопоставляя непериодические значения между вторым периодом и третьим периодом (или концом строки).