У меня есть текстовый файл (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))
Но это не нахождение мотивов.
Вы можете использовать это:
re.compile( r"(P[\w]{2}P)" )
или
re.compile( r"(P[A-Z]{2}P)" )
Meta \ w - означает буквенно-цифровые символы, аналогичные [A-Z0-9_]
Попробуйте с этим:
re.compile(r"(P..P)")
.
означает любой символ.
{2}
означает, что последний токен должен повторяться дважды (в вашем регулярном выражении это означает PP
.
\b
соответствует границам слов
P..P
(здесь.
P..P
«любой символ»). Не понимаю вопроса. Пожалуйста, обновите с ожидаемым результатом. Вы говорите регулярное выражение, чтобы искать словосочетание, затем 2P, затем P и затем словоограниченныйP..P
выглядитP..P
на первые две строки. Предположительно, вся строка предназначена для представления строки из файла.