2016-11-30 50 views
0

我有一個xml數據,有多行,我不想對每行進行特定的處理。但是,我遇到了麻煩,在獲取與標籤<Row>每行</Row>忽略python正則表達式中的新行

<Row ss:AutoFitHeight="0"> 
<Cell ss:StyleID="s69"><Data ss:Type="String">LcolDefs:</Data></Cell> 
<Cell ss:StyleID="s69"><Data ss:Type="String">Lkeywords:</Data></Cell> 
<Cell ss:StyleID="s69"><Data ss:Type="String">TestProcedure</Data></Cell> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
</Row> 
<Row ss:AutoFitHeight="0"> 
<Cell ss:StyleID="s71"><Data ss:Type="String">LsetupTest:NMTA-1772</Data></Cell> 
<Cell ss:StyleID="s72"><Data ss:Type="String">DROP4</Data></Cell> 
<Cell ss:StyleID="s71"><Data ss:Type="String">TEX::stepCatch log::log notice "start NMTA-1772"</Data></Cell> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
</Row> 
<Row ss:AutoFitHeight="0" ss:StyleID="s74"> 
<Cell ss:StyleID="s69"><Data ss:Type="String">LcolDefs:</Data></Cell> 
<Cell ss:StyleID="s69"><Data ss:Type="String">Lkeywords:</Data></Cell> 
<Cell ss:StyleID="s69"><Data ss:Type="String">TestProcedure</Data></Cell> 
<Cell ss:StyleID="s75"><Data ss:Type="String">Ljoin:Host</Data></Cell> 
<Cell ss:StyleID="s75"><Data ss:Type="String">Ljoin:Port</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:typeGroup</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:ipAddress</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:connectionType</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:port</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:username</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:password</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:id</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-code</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-pollGetNc</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-checkNe</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-checkDup</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-initializeVar</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-convertToJson</Data></Cell> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
</Row> 

我與re.findAll打得到的行式數據的列表,但它要麼不取copmplete數據,或只獲取完整數據在一個列表索引

與組合等嘗試:

re.findall('<Row.*(?:.|\n)+</Row>', table) re.findall('<Row(?:.|\n)?[^</Row>]*', table)

但沒有工作..

+0

你能提供一個樣本您預期的結果如何呢? –

+0

@Ahsanul Haque:它應該是一個列表,其中包含每個標籤之間的數據。 在數據片段中,我們有3行,所以我期待3個列表項目爲每行輸入數據 – Dcode

+1

爲什麼不在XPath中使用SAX解析器或DOM? – clemens

回答

0

用正則表達式解析它不是一個好主意。但我認爲,你只是想要它進行實驗。在這種情況下,這應該幫助:

import re 
with open('your_file.xml','r') as f: 
    file_content = f.read() 
    result_list = re.findall(r'<Row.+?>((?:\n.*?)*)<\/Row>', file_content) 
    for element in result_list: 
     print element 
     print "---------------------------->" 

輸出:

<Cell ss:StyleID="s69"><Data ss:Type="String">LcolDefs:</Data></Cell> 
<Cell ss:StyleID="s69"><Data ss:Type="String">Lkeywords:</Data></Cell> 
<Cell ss:StyleID="s69"><Data ss:Type="String">TestProcedure</Data></Cell> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 

----------------------------> 

<Cell ss:StyleID="s71"><Data ss:Type="String">LsetupTest:NMTA-1772</Data></Cell> 
<Cell ss:StyleID="s72"><Data ss:Type="String">DROP4</Data></Cell> 
<Cell ss:StyleID="s71"><Data ss:Type="String">TEX::stepCatch log::log notice "start NMTA-1772"</Data></Cell> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s73"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 

----------------------------> 

<Cell ss:StyleID="s69"><Data ss:Type="String">LcolDefs:</Data></Cell> 
<Cell ss:StyleID="s69"><Data ss:Type="String">Lkeywords:</Data></Cell> 
<Cell ss:StyleID="s69"><Data ss:Type="String">TestProcedure</Data></Cell> 
<Cell ss:StyleID="s75"><Data ss:Type="String">Ljoin:Host</Data></Cell> 
<Cell ss:StyleID="s75"><Data ss:Type="String">Ljoin:Port</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:typeGroup</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:ipAddress</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:connectionType</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:port</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:username</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:password</Data></Cell> 
<Cell ss:StyleID="s76"><Data ss:Type="String">Lparam:id</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-code</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-pollGetNc</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-checkNe</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-checkDup</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-initializeVar</Data></Cell> 
<Cell ss:StyleID="s77"><Data ss:Type="String">Lparam:-convertToJson</Data></Cell> 
<Cell ss:StyleID="s70"/> 
<Cell ss:StyleID="s70"/> 

----------------------------> 

regex101 demo