2017-06-21 38 views
1

我試圖找到具有三肽的序列。除了'P'之外,三肽可以具有任何其他氨基酸。我用下面的方法提取它們。定位爲與Biopython蛋白質序列模式

from Bio import SeqIO 
RGD = [] 
for record in SeqIO.parse("input.fasta", "fasta"): 
    rgd_count = record.seq.count('RGD') 
    if rgd_count >= 1: 
     RGD.append(record) 
SeqIO.write(RGD, "RGD_Proteins.fasta", "fasta") 

我該如何在此引入正則表達式,使得RGD(N)很好,除了RGDP?

在此先感謝。

AP

+2

您使用的方法是否支持正則表達式?如果是的話,你需要像'RGD(?!P)'(匹配'RGD'不跟着'P')。也許,你可以像'rgd_count = len(re.findall(r「RGD(?!P)」,str(record.seq)))'那樣做。不要忘記'導入re'。不知道你需要使用'str()',也許它會使用'record.seq'作爲're.findall'的第二個參數。 –

+0

我想,它可以支持正則表達式。因爲,文檔說,Bio.seq對象就像字符串。我會嘗試並更新!謝謝 – Arun

+0

請讓我知道它是否適用於您,以便我可以添加答案。 –

回答

1

你可以使用一個re.findall找到所有非重疊出現的正則表達式中str(record.seq)匹配。更換record.seq.count('RGD')

len(re.findall(r"RGD(?!P)", str(record.seq))) 

此外,請確保您添加import re

RGD(?!P)模式匹配RGD子字符串,但不跟在P之後。 (?!P)被稱爲負向預測,如果它的模式立即在當前位置的右側找到,則匹配失敗。

請參閱Regular-Expressions.info "Lookarounds" section

查看regex demo