如何多次将特定序列与字符串分开?

时间:2015-12-07 04:28:15

标签: python regex python-2.7

我有一个名为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]

2 个答案:

答案 0 :(得分: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之后使用?使用了.*。这样就可以在第一次出现*时停止正则表达式。如果它是贪婪的话,它会达到*

的最后一次出现

答案 1 :(得分:0)

一种解决方案可以是:

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