Мне нужно создать соответствующее регулярное выражение, чтобы найти генетические последовательности, и я застрял в одной конкретной проблеме - сначала начальный кодон ATG
, а также другие кодоны из трех нуклеотидов, а регулярное выражение заканчивается тремя возможными кодонами TAA
, TAG
и TGA
. Что делать, если стоп-кодон (конец) идет после стартового кодона (ATG
)? Мое текущее регулярное выражение работает, когда между стартовым и стоп-кодоном есть промежуточные кодоны, но если их нет, регулярное выражение соответствует ВСЕЙ последовательности после стартового кодона. Я знаю, почему он это делает, но я понятия не имею, как изменить его, чтобы он работал так, как я хочу.
Мое регулярное выражение должно искать AGGAGG
(именно этот шаблон), затем A
, C
, G
или T
(от 4 до 12 раз), затем ATG
(именно этот шаблон), затем A
, C
, G
или T
(в тройках (например, ACG
, TGC
и т. д.), не имеет значения, как долго) ДО тех пор, пока оно не совпадет с TAA
, TAG
или TGA
. Поиск должен закончиться после этого и начаться снова после этого.
Пример хорошего совпадения:
XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
AGGAGGTATGATGCGTACGGGCTAGTAGAGGAGGTATGATGTAGTAGCATGCT
В последовательности два совпадения — от 0 до 25 и от 28 до 44.
Мое текущее регулярное выражение (не обращайте внимания на первые две скобки):
$seq =~ /(AGGAGG)([ACGT]{4,12})(ATG)([ACTG]{3,3}){0,}(TAA|TAG|TGA)/ig