在Python中提取一些HTML标记值

时间:2010-06-23 10:42:58

标签: python html regex parsing

如何使用正则表达式在Python中获取嵌套<b> HTML标记的值?

<a href="/model.xml?hid=90971&amp;modelid=4636873&amp;show-uid=678650012772883921" class="b-offers__name"><b>LG</b> X110</a>

# => LG X110

5 个答案:

答案 0 :(得分:7)

你没有。

正则表达式不适合处理HTML的嵌套结构。请改用HTML parser

答案 1 :(得分:6)

不要使用正则表达式来解析HTML。使用像BeautifulSoup这样的HTML解析器。看看它有多容易:

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

答案 2 :(得分:1)

试试这个......

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

$ 1和$ 2应该是您想要的,或者Python用于打印捕获的组的任何方式。

答案 3 :(得分: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

答案 4 :(得分:0)

+1为Jens的回答。 lxml是一个很好的库,你可以用它来以一种强大的方式实际解析它。如果您更喜欢标准库中的某些内容,可以使用saxdomelementree