使用python,从字符串中删除HTML标记/格式

时间:2010-08-03 17:02:55

标签: python regex

我有一个包含html标记的字符串,如链接,粗体文本等。

我想剥离所有标签,所以我只有原始文本。

最好的方法是什么?正则表达式?

5 个答案:

答案 0 :(得分:33)

如果您打算使用正则表达式:

import re
def striphtml(data):
    p = re.compile(r'<.*?>')
    return p.sub('', data)

>>> striphtml('<a href="foo.com" class="bar">I Want This <b>text!</b></a>')
'I Want This text!'

答案 1 :(得分:12)

使用正则表达式的AFAIK对于解析HTML来说是一个坏主意,你会更好  使用像beautiful soup这样的HTML / XML解析器。

答案 2 :(得分:8)

使用lxml.html。它比BeautifulSoup快得多,原始文本只是一个命令。

>>> import lxml.html
>>> page = lxml.html.document_fromstring('<!DOCTYPE html>...</html>')
>>> page.cssselect('body')[0].text_content()
'...'

答案 3 :(得分:3)

使用SGMLParserregex工作简单。但是HTML有许多错综复杂的内容,你不必处理。

>>> from sgmllib import SGMLParser
>>>
>>> class TextExtracter(SGMLParser):
...     def __init__(self):
...         self.text = []
...         SGMLParser.__init__(self)
...     def handle_data(self, data):
...         self.text.append(data)
...     def getvalue(self):
...         return ''.join(ex.text)
...
>>> ex = TextExtracter()
>>> ex.feed('<html>hello &gt; world</html>')
>>> ex.getvalue()
'hello > world'

答案 4 :(得分:0)

取决于文字是否包含'&gt;'或'&lt;'我要么只是创建一个函数来删除它们之间的任何东西,或者使用解析库

def cleanStrings(self, inStr):
  a = inStr.find('<')
  b = inStr.find('>')
  if a < 0 and b < 0:
    return inStr
  return cleanString(inStr[a:b-a])