一個正則表達式將工作做好這個應用程序,但有正則表達式要做到這一點,你需要使用一個前向斷言。這基本上意味着正則表達式查找但不消費在前瞻(?=...)
內定義的內容,其中...
用於展望未來。
因此,將這一成一個完整的模式,你會得到這樣的:
>(.+?)(?=>|$)
蒸餾此,這種模式會查找>
爲出發點,然後抓住一切都交給在那裏看到了點或者另一個>
或字符串的結尾,但是 - 這是關鍵 - 它不消耗結尾>
,因此它可用於啓動下一個實例。
您還需要使用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
從列表中的每個項目中刪除這些行。