2013-09-25 2 views
1

Я понял, может ли кто-нибудь сказать мне, что я делаю неправильно с этим кодом. У меня есть HTML-код и вы хотите прочитать «Основание года», которое в этом случае равно . Как мне это? Обратите внимание на пробел и пустую строку.Regex - дата чтения из HTML

Ниже приведен код

<h4> Founded in 

</h4></td><td><h5> <!--10305--> 1949</h5></td></tr> <tr> 

И это код, который я использую. И ничего не печатается.

myf = 'THE HTML HERE' 
myf.replace("<!--10305-->", "") 
year = re.findall(r"<h4> Founded in.*? (.*?)</h5></td></tr> <tr>", myf, re.DOTALL) 
print year 

Любая помощь будет принята с благодарностью.

+2

«Я wounder, если кто-нибудь может сказать мне, что я делаю неправильно с этим кодом.» Возможно, вы используете Regex для анализа HTML ... – Veedrac

+1

Используйте [lxml] (http://lxml.de/parsing.html#parsing-html), вероятно, с помощью XPath или CSS Selector. –

+0

Разве сообщение о том, что одна ссылка на HTML-регулярное выражение Q & A выходит из моды? Потому что, если нет ... – austin

ответ

0

Строки неизменяемы. Это:

myf.replace("<!--10305-->", "") 

возвращает значение, но не меняет myf. Вы хотите:

myf = myf.replace("<!--10305-->", "") 

Далее этот код печатает что-то все равно:

import re 

myf = """\ 
<h4> Founded in 

</h4></td><td><h5> <!--10305--> 1949</h5></td></tr> <tr>""" 

myf.replace("<!--10305-->", "") 

year = re.findall(r"<h4> Founded in.*? (.*?)</h5></td></tr> <tr>", myf, re.DOTALL) 

year 
#>>> ['<!--10305--> 1949'] 

так что реальная проблема заключается в другом месте.

+0

Спасибо, не уверен, что это было неправильно с моим кодом, скопировать/вставить ваши, и это сработало. –

2

Использование lxml с XPath:

>>> import lxml.html 
>>> 
>>> root = lxml.html.fromstring(''' 
... <tr> 
... <td> 
... <h4> Founded in 
... 
... </h4></td><td><h5> <!--10305--> 1949</h5></td></tr> 
... ''') 
>>> root.xpath('//h4[contains(text(), "Founded in")]/parent::*/following-sibling::*')[0].text_content().strip() 
'1949' 
Смежные вопросы