Найдите шаблон и заключите в скобки следующую букву

#r #regex #gsub

Вопрос:

Я должен найти различные шаблоны в столбце фрейма данных, как только он будет найден, следующая буква должна быть заключена в круглые скобки:

Данные:

 a <- c('(acetyl)RKJOEQLKQ', 'LDFEION(acetyl)EFNEOW')
 

если шаблон таков: '(acetyl)'
это результат, которого я хотел бы достичь:

Ожидаемый результат:

 b <- c('(R)KJOEQLKQ', 'LDFEION(E)FNEOW')

 

Я знаю, как я могу найти шаблон с помощью gsub:

 b <- gsub('(acetyl)', replacement = '', a)
 

Однако я не уверен, как подойти к переносу между круглыми скобками следующей буквы после того, как шаблон будет найден.

Любая помощь будет признательна.

Ответ №1:

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

 a <- c('(acetyl)RKJOEQLKQ', 'LDFEION(acetyl)EFNEOW')
gsub('\(acetyl\)(.)', '(\1)', a)
## => [1] "(R)KJOEQLKQ"     "LDFEION(E)FNEOW"
 

Смотрите демонстрацию регулярных выражений и онлайн-демонстрацию R.

Подробные сведения:

  • (acetyl) — соответствует буквальной строке (acetyl)
  • (.) — захватывает в группу 1 любой отдельный символ

Шаблон (1) замены заменяет совпадения ( значением 1 группы ) .

Комментарии:

1. К вашему сведению: если вам действительно нужно сопоставить букву после (acetyl) , замените (.) на ([[:alpha:]]) , хотя ваши входные строки выглядят так, как будто все они могут содержать только букву после искомой строки.

2. Большое спасибо, Виктор, » (\1)» работает отлично. Скоро у меня будет время изучить некоторые регулярные выражения 😛