Мы можем использовать str_replace_all
из stringr
, чтобы извлечь все числа индекса, преобразовать его в эквивалентное целое вычитание 8272
(потому что это разница между целочисленными значениями ₆
и 6
и всеми другими эквивалентами) и преобразовать его обратно.
stringr::str_replace_all(vec, "\\p{No}", function(m) intToUtf8(utf8ToInt(m) - 8272))
#[1] "C6H4ClNO2" "C6H6N2O2" "C6H5NO3" "C9H10O2" "C8H8O3"
Как указывает @Wiktor Stribiżew "\\p{No}"
соответствует больше, чем цифры индекса, чтобы соответствовать только индексам от 0 до 9, которые мы можем использовать (благодаря @thothal)
str_replace_all(vec, "[\U2080-\U2089]", function(m) intToUtf8(utf8ToInt(m) - 8272))