Регулярное выражение для сопоставления последовательностей мРНК - PullRequest
0 голосов
/ 28 февраля 2019

У мРНК сплайсированных эукариот есть три ключевых свойства:

  1. мРНК начинается со стартового кодона (ATG)
  2. Кодирующая часть мРНК заканчивается одним из трех стоп-кодонов (TAA / TAG / TGA)
  3. Сразу после стоп-кодона появляется «поли (А) хвост».Поли (А) хвост представляет собой серию многих аденинов (А), прикрепленных к 3'-концу кодирующей последовательности после транскрипции.В действительности, возможно, сотни А в хвосте поли (А), но обычно конец мРНК / кДНК не полностью секвенирован, поэтому после стоп-кодона может быть всего 5 А.

Таким образом, в основном последовательность мРНК должна начинаться с ATG, после чего следует любое количество As, Cs, Ts или Gs, затем TAA или TAG или TGA, затем 5 или более As.

My (python)регулярное выражение: ^ATG[ATCG]*T(AA|AG|GA)A{5}A*$

Однако это совпадающие последовательности, которые имеют дополнительные символы после хвоста poly (A), как если бы символ $ не распознавался.Что я делаю не так?

Допустимые примеры:

ATGCTGATGATGATGATAGAAAAA
ATGTGAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Неправильные примеры:

ATGCTGATGXTGATGATAGAAAAA
TATGCTGATGXTGATGATAGAAAAA
ATGTGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC

EDIT (Мой полный код):

file = open('potential_mRNA.fasta')
alignment = SeqIO.parse(file, 'fasta')
mRNA_seqs = []
mRNA_pattern = r'^ATG[ATCG]*T(AA|AG|GA)A{5}A*$'
for mrna in alignment:
    sequence = str(mrna.seq)
    if re.search(mRNA_pattern, sequence):
        mRNA_seqs.append(sequence)

1 Ответ

0 голосов
/ 02 апреля 2019

Это работает так, потому что первый * является жадным и пытается найти максимально возможное совпадение, сопоставляет все ваши суффиксы, и анализатор регулярных выражений никогда не выходит за рамки синтаксического анализа [ATCG].

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

Попробуйте ^ATG[ATCG]*?T(?:AA|AG|GA)A{5,}$

Я использовал ленивый *? вместо *, а также группу без захвата (?:) и A{5,} вместо A{5}A* только для оптимизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...