两个程序都在读取相同的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)
更新:请帮帮我。还有其他选择吗?
答案 0 :(得分:0)
我认为你没有理由在第一个程序结束时无法执行以下操作:
m = re.search(r'(?ms).*?{{(Infobox film.*?)}}', text)
if m:
print m.group(1)
根据您的描述,您的text
变量应包含所有文本,然后您的正则表达式应该能够从中过滤掉必要的部分。