Вставить символьную строку между точкой и ди git в R - PullRequest
2 голосов
/ 21 января 2020

У меня есть вектор строк символов, например:

test <- c("A1.7","A1.8")

, и я хочу использовать регулярные выражения для вставки A1c<= между точкой и di git, например:

A1.A1c<=7 A1.A1c<=8

Я просмотрел вопросы и нашел @ zx8754 похожий вопрос; Я пытался изменить ответ, размещенный в их вопросе, но безуспешно

insert <- 'A1c<='
n <- 4
old <- test
lhs <- paste0('([[:alpha:]][[:digit:]][[:punct:]]{', n-1, '})([[:digit:]]+)$')
rhs <- paste0('\\1', insert, '\\2')
gsub(lhs, rhs, test)

Может кто-нибудь подсказать мне, как правильно выполнить это?

Ответы [ 2 ]

5 голосов
/ 22 января 2020

Другой шаблон:

gsub("\\.(\\d+)", "\\.A1c<=\\1", test)  

    ## [1] "A1.A1c<=7" "A1.A1c<=8"

Regex Demo

3 голосов
/ 22 января 2020

Вы можете использовать

insert <- 'A1c<='
test <- c("A1.7","A1.8")
sub("(?<=\\.)(?=\\d)", insert, test, perl=TRUE)
## => A1.A1c<=7 A1.A1c<=8

См. онлайн R демо

Подробности

  • (?<=\\.) - положительный взгляд сзади, который соответствует местоположению, которому непосредственно предшествует точка
  • (?=\\d) - положительный взгляд вперед, который соответствует местоположению, за которым сразу следует ди git.

Функция sub заменит только первое вхождение, а perl=TRUE позволяет использовать обходные конструкции в шаблоне (поскольку теперь он анализируется с помощью механизма регулярных выражений PCRE).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...