Расчесывание для цикла

#python #xml #elementtree

#python #xml #elementtree

Вопрос:

Обе программы читают один и тот же 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)
 

ОБНОВЛЕНИЕ: пожалуйста, помогите мне. Есть ли какая-либо другая альтернатива?

Ответ №1:

Я не вижу никаких причин, по которым вы не смогли бы выполнить следующее в конце вашей первой программы:

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

Согласно тому, что вы описываете, ваша text переменная должна содержать весь текст, и тогда ваше регулярное выражение должно иметь возможность отфильтровывать из него необходимые части.

Комментарии:

1. Это работает. большое вам спасибо. Я новичок в python. Я учусь.