Рестрикционные сайты и неоднозначные мотивы
Многие биологические мотивы не точны: «G, затем пурин, затем T». Такие паттерны ищут регулярными выражениями.
Рестрикционный сайт — короткая (обычно палиндромная) последовательность, которую узнаёт и разрезает фермент-рестриктаза. Поиск таких сайтов — классическая задача молекулярного клонирования.
Рестриктазы — «молекулярные ножницы», основа генной инженерии. Чтобы спланировать клонирование, нужно знать, где фермент разрежет ДНК. Часть сайтов точные (EcoRI = GAATTC), часть допускают варианты — и тут на сцену выходят IUPAC-коды и регулярки.
Поиск точного рестрикционного сайта
def find_sites(seq, site):
positions = []
i = seq.find(site)
while i != -1:
positions.append(i + 1) # 1-based, как принято у биологов
i = seq.find(site, i + 1)
return positions
plasmid = 'GAATTCAAAGAATTCGGCC'
print('EcoRI (GAATTC) в позициях:', find_sites(plasmid, 'GAATTC'))Вывод:
EcoRI (GAATTC) в позициях: [1, 10]
Неоднозначность: коды IUPAC
Некоторые ферменты узнают семейство сайтов. Чтобы записать «любой пурин», используют коды IUPAC: R = A или G, Y = C или T, N = любой, W = A или T, S = G или C. Переведём IUPAC-мотив в регулярное выражение.
| Код | Значит | Регулярка |
| R | A или G (пурин) | [AG] |
| Y | C или T (пиримидин) | [CT] |
| S | G или C | [GC] |
| W | A или T | [AT] |
| N | любой | [ACGT] |
import re
IUPAC = {'A':'A','C':'C','G':'G','T':'T',
'R':'[AG]','Y':'[CT]','S':'[GC]','W':'[AT]','N':'[ACGT]'}
def motif_to_regex(motif):
return ''.join(IUPAC[b] for b in motif)
seq = 'AAGAATTCGGGAGTTCCCGACTTC'
pattern = motif_to_regex('GASTTC') # S = G или C
print('Регулярка:', pattern)
for m in re.finditer(pattern, seq):
print(f' {m.group()} в позиции {m.start()}')Вывод:
Регулярка: GA[GC]TTC GAGTTC в позиции 10 GACTTC в позиции 18
Мотив GASTTC превратился в регулярку GA[GC]TTC и нашёл оба варианта — GAGTTC и GACTTC. Так один компактный паттерн покрывает семейство сайтов.
Регулярные выражения в биоинформатике мощны, но требуют осторожности из-за специфики алфавита. У строгих биологических мотивов часто есть позиции «строго такая буква» и позиции «что угодно», и удобно описывать их таблицей частот, а не одной регуляркой, — это так называемые позиционно-весовые матрицы (PWM), которыми моделируют сайты связывания. Регулярка отвечает на вопрос «да или нет» (подходит сайт или нет), а PWM даёт оценку «насколько хорошо подходит», что ближе к биологической реальности, где сайты бывают сильными и слабыми. Регулярки — отличный первый инструмент, а PWM — следующий шаг, когда нужна градация. Помните и про производительность: сложная регулярка с множеством альтернатив может работать медленно на геномных масштабах, поэтому для частых запросов мотив сначала загрубляют до точного ядра, ищут его быстро, а полную проверку делают лишь вокруг кандидатов.
Перекрытия в регулярках
Важная тонкость: re.finditer по умолчанию не находит перекрывающиеся совпадения — найдя одно, движок продолжает после него. Для перекрывающихся паттернов используют lookahead-приём, но это уже тонкость; помните о нём, когда мотив может накладываться сам на себя.
Как работает под капотом: почему сайты палиндромны
Многие рестрикционные сайты равны своему обратному комплементу (мы видели это в разделе про комплемент). Причина — симметрия фермента: рестриктаза часто состоит из двух одинаковых половин, каждая узнаёт свою нить. Поэтому сайт «читается одинаково» на обеих нитях, и фермент режет симметрично. Это значит, что искать палиндромный сайт достаточно на одной нити — на второй он в той же позиции.
Стоит увидеть и практическую цель всего этого — карту рестрикции. Прежде чем разрезать плазмиду и вставить нужный ген, молекулярный биолог строит карту: где какой фермент режет и на какие фрагменты распадётся молекула. Имея функцию поиска сайтов, такую карту легко посчитать программно для целого набора ферментов сразу: пройтись по словарю «фермент → сайт», для каждого найти позиции разрезов и отсортировать. Получается готовый план эксперимента. Именно это делают популярные инструменты вроде NEBcutter, и теперь вы понимаете, что у них внутри — тот же поиск подстроки, что мы написали, плюс база сайтов сотен ферментов.
Частые ошибки
- Забыть про IUPAC. Записать неоднозначный мотив как точный — значит пропустить половину сайтов.
- Ждать перекрытий от finditer. По умолчанию он их не даёт.
- Путать 0-based и 1-based. Биологи нумеруют с 1; решите, в каких координатах выводить, и будьте последовательны.
Итог
- Точные сайты ищут поиском подстроки; неоднозначные — регулярками.
- Коды IUPAC (R, Y, N, ...) кодируют наборы букв и переводятся в классы символов регулярки.
re.finditerне находит перекрывающиеся совпадения по умолчанию.- Палиндромность сайтов отражает симметрию ферментов и позволяет искать на одной нити.