re.finditer
- это то, что вы, вероятно, хотите использовать, поскольку оно даст вам match object
, которые имеют start
и end
координаты совпадения; они могут быть использованы для нарезки подстроки из исходной строки.
import re
from io import StringIO
from Bio import SeqIO
sequence = StringIO(
""">seq
FWSTQALLPTTLLGASPL
"""
)
for seqs in SeqIO.parse(sequence, "fasta"):
# to find pattern
p = re.compile("L*")
seqstr = str(seqs.seq)
matches = p.finditer(seqstr)
for m in matches:
if m.group():
start, end = m.span()
print(
"{start} {match} {end}".format(start=start, match=m.group(), end=end)
)
Что выводит:
6 LL 8
11 LL 13
Примечание к строкам в python, они основаны на нуле , что означает, что первый символ пронумерован 0
. Стоит прочитать учебник по строкам . Вкратце, используя вашу последовательность:
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| F | W | S | T | Q | A | L | L | P | T | T | L | L | G | A | S | P |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
slice pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
index pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# So using the output you can see:
>>> seq[6:8]
'LL'