2016-11-30 3 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

Почему бы вам не использовать SAX-парсер или DOM с XPath? – 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

Смежные вопросы