2011-10-21 74 views
0

這兩個程序都讀取相同的XML文件。第一個程序複製<text></text>標籤之間的所有數據。第二個程序從<text></text>標籤複製有限的數據。梳理循環

我只想限制數據。那麼,有可能在第一個方案,以使用以下語句:

m = re.search(r'(?ms).*?{{(Infobox film.*?)}}', t.text) 

的第一個程序

from lxml import etree 
doc = etree.parse('file.xml') 
def first(seq,default=None): 
    for item in seq: 
    return item 
    return default 
    NSMAP=dict(mw="http://www.mediawiki.org/xml/export-0.5/") 
for i,page in enumerate(doc.xpath('/mw:mediawiki/mw:page',namespaces=NSMAP)): 
    text = first(page.xpath('./mw:revision/mw:text/text()',namespaces=NSMAP)) 
    id = first(page.xpath('./mw:id/text()',namespaces=NSMAP)) 
    title = first(page.xpath('./mw:title/text()',namespaces=NSMAP)) 
    print " %s" % (text) 

第二個程序

import re 
from xml.etree import ElementTree 
with open('file.xml') as f: 
    xml = ElementTree.parse(f) 
    for t in xml.findall('//{http://www.mediawiki.org/xml/export-0.5/}text'): 
    print '====================' 
    m = re.search(r'(?ms).*?{{(Infobox film.*?)}}', t.text) 
    if m: 
     print m.group(1) 

UPDATE:請幫助我。還有其他的選擇嗎?

回答

0

我看不出有任何理由,你爲什麼不能夠做你的第一個程序結束如下:

m = re.search(r'(?ms).*?{{(Infobox film.*?)}}', text) 
if m: 
    print m.group(1) 

按照你的描述,你的text變量應該包含所有文本,然後您的正則表達式應該能夠從中濾除必要的部分。

+0

它的工作。非常感謝。我是python的新手。我在學。 –