2010-06-23 4 views

ответ

1

Ваш вопрос был очень трудным для понимания, но из данного выходного примера похоже, что вы хотите удалить все из < и > из текста ввода. Это может быть сделано следующим образом:

import re 
input_text = '<a bob>i <b>c</b></a>' 
output_text = re.sub('<[^>]*>', '', input_text) 
print output_text 

Что дает вам:

i c 

Если это не то, что вы хотите, пожалуйста, уточнить.

Обратите внимание, что подход к регулярному выражению для синтаксического анализа XML очень хрупкий. Например, приведенный выше пример разбился бы на вход <a name="b>c">hey</a>. (> - действительный символ в значении атрибута: see XML specs)

7

У вас нет.

Регулярные выражения не подходят для работы с вложенной структурой HTML. Вместо этого используйте HTML parser.

1

Попробуйте это ...

<a.*<b>(.*)</b>(.*)</a> 

$ 1 и $ 2 должно быть то, что вы хотите, или что-то означает, Python имеет для печати захваченных групп.

+0

Python, а не PHP ... – msanders

0

+1 для ответа Йенса. lxml - хорошая библиотека, которую вы можете использовать для эффективного анализа этого. Если вы предпочитаете что-то в стандартной библиотеке, вы можете использовать sax, dom или elementree.

6

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

from BeautifulSoup import BeautifulSoup 
html = r'<a href="removed because it was too long"><b>LG</b> X110</a>' 
soup = BeautifulSoup(html) 
print ''.join(soup.findAll(text=True)) 
# LG X110 
Смежные вопросы