首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从定义的起始点和结束点的字符串中提取子字符串

从定义的起始点和结束点的字符串中提取子字符串
EN

Stack Overflow用户
提问于 2021-05-09 16:49:37
回答 1查看 539关注 0票数 2

我有一个三个序列的列表,看起来或多或少都是这样的(res):

代码语言:javascript
运行
复制
res = [
     'NVAKMFPQRKFT<STOP>TVQTLMRNGTLLERG<STOP>CCEVSP',

     'QKRMDCNASV<STOP>TVTVQTLMQTL<STOP>TNTPKGG<STOP>',

     'MEKGYADAE<STOP>RKTF<STOP>MTVRAGCCGI<STOP>MK'
]

我希望将这些序列中的每一个拆分为以'M‘开头、以(但不包括)< STOP >结尾的子字符串。这些子子在这里被定义为外显子。我不希望我的外显子重叠(真正的序列比这里的样本长得多)。我希望在M和< STOP >之间至少有两个字符。

代码语言:javascript
运行
复制
   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

我想得到这样的嵌套列表:

代码语言:javascript
运行
复制
exon = [

     "['MFPQRKFT', 'MRNGTLLERG']",
     "['MDCNASV', 'MQTL']",
     "['MEKGYADAE', 'MTVRAGCCGI']"
]

但是现在我只得到了一个有几个外显子的列表,在每一个外显子的末尾都有< STOP >。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-09 17:40:56

您可以使用捕获组和re.findall的模式来返回捕获组的值。

代码语言:javascript
运行
复制
(M.{2,}?)<STOP>
  • (捕获组1 (这将由re.findall返回)
    • M.{2,}?匹配M和2次或更多次任何字符非贪婪

  • )闭组1
  • <STOP>匹配

regex演示Python演示

如果只想匹配大写字符( .匹配除换行符以外的任何字符),则可以使用

代码语言:javascript
运行
复制
(M[A-Z]{2,})<STOP>

Regex演示

例如

代码语言:javascript
运行
复制
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)

输出

代码语言:javascript
运行
复制
[
  ['MFPQRKFT', 'MRNGTLLERG'],
  ['MDCNASV', 'MQTL'],
  ['MEKGYADAE', 'MTVRAGCCGI']
]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67460222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档