从具有定义起点和终点的字符串中提取子字符串
Extract substrings from a string with defined starting and ending points
我有一个大致像这样的三个序列的列表 (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']"
]
但现在我只得到一个包含几个外显子的列表,并且每个外显子的末尾都有 。
您可以使用带有捕获组的模式和 re.findall 这将 return 捕获组的值
(M.{2,}?)<STOP>
(
捕获 组 1(这将由 re.findall 编辑 return)
M.{2,}?
匹配 M
和 2 次或更多次任何非贪婪的字符
)
关闭组 1
<STOP>
字面匹配
看到一个regex demo and a Python demo
如果你只想匹配大写字符(.
匹配除换行符之外的任何字符)你可以使用
(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']
]
我有一个大致像这样的三个序列的列表 (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']"
]
但现在我只得到一个包含几个外显子的列表,并且每个外显子的末尾都有
您可以使用带有捕获组的模式和 re.findall 这将 return 捕获组的值
(M.{2,}?)<STOP>
(
捕获 组 1(这将由 re.findall 编辑 return)M.{2,}?
匹配M
和 2 次或更多次任何非贪婪的字符
)
关闭组 1<STOP>
字面匹配
看到一个regex demo and a Python demo
如果你只想匹配大写字符(.
匹配除换行符之外的任何字符)你可以使用
(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']
]