#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)» работает отлично. Скоро у меня будет время изучить некоторые регулярные выражения 😛