Мне нужно создать соответствующее регулярное выражение, чтобы найти генетические последовательности, и я застрял за одной конкретной проблемой - после первого запуска кодона ATG
, также следует другие кодоны из трех нуклеотидов, и регулярное выражение заканчивается тремя возможными кодонами TAA
, TAG
и TGA
. Что если стоп-кодон (end) идет после стартового (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