我有以下的Python的正則表達式:Python的正則表達式過於貪婪,錯過在XML第一次出現
xml_parse = re.search(r'^.+?<Hit_accession>(\w+?)</Hit_accession>.+?<Hsp_qseq>(\w+?)</Hsp_qseq>\s+?<Hsp_hseq>(\w+?)</Hsp_hseq>\s+?<Hsp_midline>(.+?)</Hsp_midline>',string,flags=re.DOTALL)
以下文字:
<?xml version="1.0"?>
<Hit_accession> Desired Group #1 </Hit_accession>
<Hsp>
<Hsp_qseq> Desired Group # 2 </Hsp_qseq>
<Hsp_hseq> Desired Group # 3 </Hsp_hseq>
<Hsp_midline> Desired Group # 4 </Hsp_midline>
</Hsp>
... way later in the XML string
<Hit_accession> Undesired Group #1 </Hit_accession>
<Hsp>
<Hsp_qseq> Undesired Group # 2 </Hsp_qseq>
<Hsp_hseq> Undesired Group # 3 </Hsp_hseq>
<Hsp_midline> Undesired Group # 4 </Hsp_midline>
</Hsp>
在組正在返回的是:
( 1)期望的組#1
(2)不期望的組#2
(3)不期望的組#3
(4)不期望的組#4
這是怎麼發生的?因爲我得到了希望的組#1並且使用非貪婪。+?與flags = re.DOTALL,我希望它不會跳過任何我想要的組2-4。
在此先感謝。
UPDATE:
結束了使用xml.etree.ElementTree如下:
tree = xml.etree.ElementTree.fromstring(string)
iteration = tree.find("BlastOutput_iterations/Iteration")
hits = iteration.findall("Iteration_hits/Hit")
topHit = hits[0]
accessionNCBI = topHit.findtext("Hit_accession")
實測值以下鏈接NCBI BLAST特定XML解析的例子有用: http://www.dalkescientific.com/writings/NBN/elementtree.html
**'xml_parse = re.search(...'** aaaaaaarrrrrggggghhhhh !!!! - 請按照此[鏈接](http://stackoverflow.com/a/1732454/1132524)。 – 2012-03-04 09:47:33
什麼是除了你對一個人不感興趣之外,你希望的和不想要的組之間的區別? – 2012-03-04 09:51:54
輸入顯然應該是XML,但是顯示的內容不是良構。 – mzjn 2012-03-04 10:03:28