我有一个三个序列的列表,看起来或多或少都是这样的(res):
res = [
'NVAKMFPQRKFT<STOP>TVQTLMRNGTLLERG<STOP>CCEVSP',
'QKRMDCNASV<STOP>TVTVQTLMQTL<STOP>TNTPKGG<STOP>',
'MEKGYADAE<STOP>RKTF<STOP>MTVRAGCCGI<STOP>MK'
]我希望将这些序列中的每一个拆分为以'M‘开头、以(但不包括)< STOP >结尾的子字符串。这些子子在这里被定义为外显子。我不希望我的外显子重叠(真正的序列比这里的样本长得多)。我希望在M和< STOP >之间至少有两个字符。
exon = list()
for seq in res:
string = str(res)
result = re.search("M(.*?)<STOP>", string)
if result:
found = list()
found = result.group()
exon.append(found)
print exon我想得到这样的嵌套列表:
exon = [
"['MFPQRKFT', 'MRNGTLLERG']",
"['MDCNASV', 'MQTL']",
"['MEKGYADAE', 'MTVRAGCCGI']"
]但是现在我只得到了一个有几个外显子的列表,在每一个外显子的末尾都有< STOP >。
发布于 2021-05-09 17:40:56
您可以使用捕获组和re.findall的模式来返回捕获组的值。
(M.{2,}?)<STOP>(捕获组1 (这将由re.findall返回) M.{2,}?匹配M和2次或更多次任何字符非贪婪)闭组1<STOP>匹配如果只想匹配大写字符( .匹配除换行符以外的任何字符),则可以使用
(M[A-Z]{2,})<STOP>例如
import re
exon = list()
res = [
'NVAKMFPQRKFT<STOP>TVQTLMRNGTLLERG<STOP>CCEVSP',
'QKRMDCNASV<STOP>TVTVQTLMQTL<STOP>TNTPKGG<STOP>',
'MEKGYADAE<STOP>RKTF<STOP>MTVRAGCCGI<STOP>MK'
]
for seq in res:
exon.append(re.findall(r"(M.{2,}?)<STOP>", seq))
print(exon)输出
[
['MFPQRKFT', 'MRNGTLLERG'],
['MDCNASV', 'MQTL'],
['MEKGYADAE', 'MTVRAGCCGI']
]https://stackoverflow.com/questions/67460222
复制相似问题