re.search
method do not return a simply boolean but a useful object contains many information:
#! /usr/bin/env python3
import re
peptide1="MKFSNEVVHKSMNITEDCSALTGALLKYSTDKSNMNFETLYRDAAVESPQHEVSNESGSTLKEHDYFGLSEVSSSNSSSGKQPEKCCREELNLNESATTLQLGPPAAVKPSGHADGADAHDEGAGPENPAKRPAHHMQQESLADGRKAAAEMGSFKIQRKNILEEFRAMKAQAHMTKSPKPVHTMQHNMHASFSGAQMAFGGAKNNGVKRVFSEAVGGNHIAASGVGVGVREGNDDVSRCEEMNGTEQLDLKVHLPKGMGMARMAPVSGGQNGSAWRNLSFDNMQGPLNPFFRKSLVSKMPVPDGGDSSANASNDCANRKGMVASPSVQPPPAQNQTVGWPPVKNFNKMNTPAPPASTPARACPSVQRKGASTSSSGNLVKIYMDGVPFGRKVDLKTNDSYDKLYSMLEDMFQQYISGQYCGGRSSSSGESHWVASSRKLNFLEGSEYVLIYEDHEGDSMLVGDVPWELFVNAVKRLRIMKGSEQVNLAPKNADPTKVQVAVG"
re_search_result = re.search(r'L*L*L', peptide1)
if re_search_result:
print("YES")
motif_start_position=re_search_result.start()
motif_end_position=re_search_result.end()
motif_length = re_search_result.end() - re_search_result.start()
print("Motif start at position: %d" % motif_start_position)
print("Motif end at position : %d" % motif_end_position)
print("SO length is ......... : %d" % motif_length)
print("The motif is : <%s>" % peptide1[motif_start_position:motif_end_position])
else:
print("NO")
Result is:
YES
Motif start at position: 20
Motif end at position : 488
SO length is ......... : 468
The motif is : <LTGALLKYSTDKSNMNFETLYRDAAVESPQHEVSNESGSTLKEHDYFGLSEVSSSNSSSGKQPEKCCREELNLNESATTLQLGPPAAVKPSGHADGADAHDEGAGPENPAKRPAHHMQQESLADGRKAAAEMGSFKIQRKNILEEFRAMKAQAHMTKSPKPVHTMQHNMHASFSGAQMAFGGAKNNGVKRVFSEAVGGNHIAASGVGVGVREGNDDVSRCEEMNGTEQLDLKVHLPKGMGMARMAPVSGGQNGSAWRNLSFDNMQGPLNPFFRKSLVSKMPVPDGGDSSANASNDCANRKGMVASPSVQPPPAQNQTVGWPPVKNFNKMNTPAPPASTPARACPSVQRKGASTSSSGNLVKIYMDGVPFGRKVDLKTNDSYDKLYSMLEDMFQQYISGQYCGGRSSSSGESHWVASSRKLNFLEGSEYVLIYEDHEGDSMLVGDVPWELFVNAVKRLRIMKGSEQVNL>
The motif L*L*L
is a quite strange: L
zero or many times followed by L
zero or many times followed by followed by a L
. It's an equivalent of L*L
, equivalent of L+
.
Do you search for L.*L.*L
, L[^L]*L[^L]*L
or simply LLL
?
Notes:
- When you post code, use block delimited by two ``` (no by two simple `)
- In Python, code indentation is very important, always use spaces (4)
If you want to loop over all motifs (like strings), use findall
method:
#! /usr/bin/env python3
import re
peptide1="MKFSNEVVHKSMNITEDCSALTGALLKYSTDKSNMNFETLYRDAAVESPQHEVSNESGSTLKEHDYFGLSEVSSSNSSSGKQPEKCCREELNLNESATTLQLGPPAAVKPSGHADGADAHDEGAGPENPAKRPAHHMQQESLADGRKAAAEMGSFKIQRKNILEEFRAMKAQAHMTKSPKPVHTMQHNMHASFSGAQMAFGGAKNNGVKRVFSEAVGGNHIAASGVGVGVREGNDDVSRCEEMNGTEQLDLKVHLPKGMGMARMAPVSGGQNGSAWRNLSFDNMQGPLNPFFRKSLVSKMPVPDGGDSSANASNDCANRKGMVASPSVQPPPAQNQTVGWPPVKNFNKMNTPAPPASTPARACPSVQRKGASTSSSGNLVKIYMDGVPFGRKVDLKTNDSYDKLYSMLEDMFQQYISGQYCGGRSSSSGESHWVASSRKLNFLEGSEYVLIYEDHEGDSMLVGDVPWELFVNAVKRLRIMKGSEQVNLAPKNADPTKVQVAVG"
re_findall_result = re.findall(r'L[^L]*L[^L]*L', peptide1)
for element in re_findall_result:
print("Element: <%s>" % element)
Result will be:
Element: <LTGALL>
Element: <LYRDAAVESPQHEVSNESGSTLKEHDYFGL>
Element: <LNLNESATTL>
Element: <LGPPAAVKPSGHADGADAHDEGAGPENPAKRPAHHMQQESLADGRKAAAEMGSFKIQRKNIL>
Element: <LDLKVHL>
Element: <LSFDNMQGPLNPFFRKSL>
Element: <LVKIYMDGVPFGRKVDLKTNDSYDKL>
Element: <LEDMFQQYISGQYCGGRSSSSGESHWVASSRKLNFL>
Element: <LIYEDHEGDSMLVGDVPWEL>
If you want all find objects like with search
method, use finditer
method:
#! /usr/bin/env python3
import re
peptide1="MKFSNEVVHKSMNITEDCSALTGALLKYSTDKSNMNFETLYRDAAVESPQHEVSNESGSTLKEHDYFGLSEVSSSNSSSGKQPEKCCREELNLNESATTLQLGPPAAVKPSGHADGADAHDEGAGPENPAKRPAHHMQQESLADGRKAAAEMGSFKIQRKNILEEFRAMKAQAHMTKSPKPVHTMQHNMHASFSGAQMAFGGAKNNGVKRVFSEAVGGNHIAASGVGVGVREGNDDVSRCEEMNGTEQLDLKVHLPKGMGMARMAPVSGGQNGSAWRNLSFDNMQGPLNPFFRKSLVSKMPVPDGGDSSANASNDCANRKGMVASPSVQPPPAQNQTVGWPPVKNFNKMNTPAPPASTPARACPSVQRKGASTSSSGNLVKIYMDGVPFGRKVDLKTNDSYDKLYSMLEDMFQQYISGQYCGGRSSSSGESHWVASSRKLNFLEGSEYVLIYEDHEGDSMLVGDVPWELFVNAVKRLRIMKGSEQVNLAPKNADPTKVQVAVG"
re_findall_result = re.finditer(r'L[^L]*L[^L]*L', peptide1)
for element in re_findall_result:
print("peptide1[%s:%s]=<%s>" % (element.start(), element.end(), peptide1[element.start():element.end()]))
Result will be:
peptide1[20:26]=<LTGALL>
peptide1[39:69]=<LYRDAAVESPQHEVSNESGSTLKEHDYFGL>
peptide1[90:100]=<LNLNESATTL>
peptide1[101:163]=<LGPPAAVKPSGHADGADAHDEGAGPENPAKRPAHHMQQESLADGRKAAAEMGSFKIQRKNIL>
peptide1[248:255]=<LDLKVHL>
peptide1[278:296]=<LSFDNMQGPLNPFFRKSL>
peptide1[378:404]=<LVKIYMDGVPFGRKVDLKTNDSYDKL>
peptide1[407:443]=<LEDMFQQYISGQYCGGRSSSSGESHWVASSRKLNFL>
peptide1[449:469]=<LIYEDHEGDSMLVGDVPWEL>
L*L*L*
will match anything at all sinceL*
means "0 or more L", so it will matchL
but it will also match X or anything else. $\endgroup$