2013-01-04 2 views
-1
s = '''<p>Plain text, <i>italicized phrase, 
<i>italicized subphrase</i>, <b>bold 
subphrase</b></i>, <i>other italic 
phrase</i></p>''' 

r1 = r'''(?sx)(
<i>(
(?!</?i>). 
| 
<i> ((?!</?i>).)* </i> 
)*</i> 
)''' 

Я использую образец r1 для захвата <i>...</i> в строке s. Но <i>italicized subphrase</i> не может быть захвачен. Почему?захватывать вложенные теги с регулярным выражением?

Я не имею дело с кодом HTML, но что-то похожее с структурой гнезда HTML! Я просто беру эти коды, например. Моя проблема заключается в том, как захватить как вложенные, так и вложенные теги только в структуре одного слоя.

+1

Используйте разумный HTML парсер ... –

+0

ARGH, пожалуйста, не пытайтесь разобрать HTML с регулярным выражением. – Yuushi

+1

Полусвязь: http://stackoverflow.com/q/133601/646543 Связанный с тангенциально-смешным: http://stackoverflow.com/q/1732348/646543 (см. Ответы) – Michael0x2a

ответ

2

Вы используете регулярное выражение, и соответствующий XML с такими выражениями получает too complicated, too fast.

Пожалуйста, не сделать это трудно на себя и использовать HTML-парсер вместо этого, Python имеет несколько на выбор:

  • ElementTree является частью стандартной библиотеки
  • BeautifulSoup популярная третья библиотека партия
  • lxml - это быстрая и многофункциональная библиотека на основе C.

ElementTree пример:

from xml.etree import ElementTree 

tree = ElementTree.parse('filename.html') 
for elem in tree.findall('i'): 
    print ElementTree.tostring(elem) 
+0

Я просто беру этот HTML-код, и я не разбираюсь в HTML-коде. – ThunderEX

+0

И моя проблема заключается в том, как захватить как вложенные, так и вложенные теги (а не тег HTML, а не что-то подобное, определенное мной) только с одним слоем слоя? – ThunderEX

+0

@ThunderEX: вы * должны * анализировать HTML-код. Вложенные теги в регулярных выражениях * hard *, и вы действительно хотите избежать этой боли. –

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