Регулярное выражение в Python

1

У меня есть текстовый файл (seq.fasta), который содержит последовательность следующим образом

M1

MPMILGYWNVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKFKLGLDFPNL
PYLIDGSHKITQSNAILRYLARKHHLDGETEEERIRADIVENQVMDTRMQLIMLCYNPDF
EKQKPEFLKTIPEKMKLYSEFLGKRPWFAGDKVTYVDFLAYDILDQYRMFEPKCLDAFPN
LRDFLARFEGLKKISAYMKSSRYIATPIFSKMAHWSNK

Мне нужно извлечь мотив PXXP ровно 4 символа (XX может быть любым символом).

Я пробовал следующий код:

import re

infile=open("seq.fasta",'r')

out=open("out.csv",'w')

for line in infile:

   line = line.strip("\n")

   if line.startswith('>'):

      name=line

   else:

      motif = re.compile(r"(\bP{2}P\b)")

      c = line.count('motif')

      print '%s:%s' %(name,c)

      out.write('%s:%s\n' %(name,c))

Но это не нахождение мотивов.

  • 0
    В приведенном выше вводе нет строки P..P (здесь . P..P «любой символ»). Не понимаю вопроса. Пожалуйста, обновите с ожидаемым результатом. Вы говорите регулярное выражение, чтобы искать словосочетание, затем 2P, затем P и затем словоограниченный
  • 0
    @Fredrik Строка P..P выглядит P..P на первые две строки. Предположительно, вся строка предназначена для представления строки из файла.
Теги:

2 ответа

3
Лучший ответ

Вы можете использовать это:

re.compile( r"(P[\w]{2}P)" )

или

re.compile( r"(P[A-Z]{2}P)" )

Meta \ w - означает буквенно-цифровые символы, аналогичные [A-Z0-9_]

  • 0
    Спасибо работает отлично
5

Попробуйте с этим:

 re.compile(r"(P..P)")

. означает любой символ.

{2} означает, что последний токен должен повторяться дважды (в вашем регулярном выражении это означает PP.

\b соответствует границам слов

Ещё вопросы

Сообщество Overcoder
Наверх
Меню