一个正则表达式将工作做好这个应用程序,但有正则表达式要做到这一点,你需要使用一个前向断言。这基本上意味着正则表达式查找但不消费在前瞻(?=...)
内定义的内容,其中...
用于展望未来。
因此,将这一成一个完整的模式,你会得到这样的:
>(.+?)(?=>|$)
蒸馏此,这种模式会查找>
为出发点,然后抓住一切都交给在那里看到了点或者另一个>
或字符串的结尾,但是 - 这是关键 - 它不消耗结尾>
,因此它可用于启动下一个实例。
您还需要使用DOTALL
标志,以确保新行符合.
和findall
函数返回的所有比赛。
所以,像这样将工作:
#!/usr/env/python
import re
string = """>X0
CUUGACGAUCA
CGCAUCG
>X55
UACGGCGG
UUCAGC
AUCG
>X300
AAACCCGGGG"""
res = re.findall('>(.+?)(?=>|$)', string, re.DOTALL)
print "results: {0}".format(res)
输出是:
results: ['X0\nCUUGACGAUCA\nCGCAUCG\n', 'X55\nUACGGCGG\nUUCAGC\nAUCG\n', 'X300\nAAACCCGGGG']
更多的正则表达式的详细信息,请参见Python regex doc。
如果您不想在结果中使用换行符,则可以使用string.replace
从列表中的每个项目中删除这些行。