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