В вашем регулярном выражении отсутствует группа захвата вокруг буквенного шаблона (чтобы вы могли сохранить его после замены) и содержит избыточный ^
якорь, который соответствует начальному положению строки. Кроме того, вы используете функцию gsub
, в то время как вам просто нужен sub
, так как ожидается только одна замена.
Используйте
sub("([[:upper:]])", ".\\1", V2)
с stringr
(см. демо ):
stringr::str_replace(V2, "[[:upper:]]", "\\.\\0")
Подробности
sub
- заменяется только первое совпадение ([[:upper:]])
- соответствует, а захватывает любую заглавную букву в Группу 1 (позже упоминается \1
из шаблона замены) \1
- значение Группы 1 (заглавная буква соответствует )
Обратите внимание, что решение stingr
использует \0
, заполнитель для всего значения соответствия, поэтому нет необходимости фиксировать заглавную букву в шаблоне регулярного выражения.
См. R демо :
V2 <- c("6K102","62D102","627Z102")
sub("([[:upper:]])", ".\\1", V2)
# => [1] "6.K102" "62.D102" "627.Z102"