【问题标题】:How do I separate a specific sequence from a string multiple times?如何多次将特定序列与字符串分开?
【发布时间】:2016-03-11 15:14:53
【问题描述】:

我有一个名为 protein 的字符串。它打印出这样的内容:KALSKJKDALIEUTSTARTALKSJDALK*KAJSLDKJSTARTJAISOIEWORUNCD*

我想要一个代码,可以在此字符串中搜索 START* 并打印它们之间的字符,在本例中为字母。

例如:protein = STARTJSADHFJAS*KJSTARTAKSLJDIOQWIE*

print protein_filtered = [JSADHFJAS, AKSLJDIOQWIE]

到目前为止,我有这个,但这只会让我得到第一个蛋白质序列。另外,我不在乎它是附加到列表还是字符串。

start_marker = 'START'
end_marker = '*'
start = protein.index(start_marker) + len(start_marker)
end = protein.index(end_marker, start + 1)
print protein[start:end]

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:
    START(.*?)\*
    

    您可以通过re 进行此操作。请参阅演示。

    https://regex101.com/r/hE4jH0/41

    import re
    p = re.compile(ur'START(.*?)\*', re.MULTILINE)
    test_str = u"STARTJSADHFJAS*KJSTARTAKSLJDIOQWIE*"
    
    re.findall(p, test_str)
    

    我们在这里使用了non greedy regex,通过在.* 之后附加?。这样正则表达式就会在* 的第一次出现时停止。如果它是贪婪的,它将到达@ 的最后一次出现987654329@

    【讨论】:

    • 这是我的赞成票,但请提供有关您的正则表达式的更多详细信息。贪婪的?懒惰的?让他知道这是怎么回事。
    • 谢谢你,vks。这个答案很完美!
    • @PeterSamuel 点击绿色箭头接受。
    【解决方案2】:

    一个解决方案可以是:

    final_list = [i.split('\\')[0] for i in [i for i protein.split('START') if i]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 2020-05-09
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多