基本上輸入文件是這樣的:使用re.MULTILINE的和re.DOTALL一起蟒
> U51677人類非組蛋白染色質蛋白質HMG1(HMG1)基因,完整
cds. #some records don't have this line (see below) Length = 2575
(一些文本)
> U51677人類非組蛋白染色質蛋白質HMG1(HMG1)基因,完整
Length = 2575
(一些文本)
(等)
現在,我寫了這個提取與>啓動線和工作正常,長度
import re
regex = re.compile("^(>.*)\r\n.*Length\s=\s(\d+)", re.MULTILINE)
match = regex.findall(sample_blast.read())
print match[0]
數用於在長度線是>行的下一行時提取記錄。
然後我試着re.DOTALL,它應該使任何記錄匹配(。*長度),無論是否有一個額外的行或不。
regex = re.compile("^(>.*)\r\n.*(?:\r\n*.?)Length\s=\s(\d+)", re.MULTILINE|re.DOTALL)
但它不起作用。我嘗試了re.MULTILINE和re.DOTALL而不是pipe,但仍然無法工作。
所以問題是如何創建匹配記錄的正則表達式並返回所需的組,而不管記錄中是否有多餘的行。如果有人能夠在re.VERBOSE中展示這個,那也會很好。對不起,很長的職位,並感謝提前的任何幫助。 :)
你確定'>'是行上的第一個字符嗎?還有,真的只有'\ r \ n'行結束符或'\ n'行結束符是一個選項嗎?如果在'r'文本中打開'sample_blast'模式然後python可能已經爲你翻譯這些。 –