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

Bla*_*man 15 python regex

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

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

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

Joh*_*ard 36

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

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!'
Run Code Online (Sandbox Code Playgroud)

  • 加上这个也将删除以下文字=>"如果3 <5然后5> 3" (5认同)
  • 这只会在格式良好的 HTML 上可靠地工作(即,在实际标签之外没有未转义的 `&lt;` 或 `&gt;`,没有像 `&lt;b class="forgot-to-close"` 等格式错误的标签)。话虽如此,这是我使用的第一种方法,具体取决于源数据。 (2认同)

vol*_*ing 12

使用正则表达式的AFAIK对于解析HTML来说是一个坏主意,你最好使用像美丽的汤这样的HTML/XML解析器.

  • 给美丽的汤+1 (6认同)

Tim*_*ara 10

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

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

  • 好的解决方案,谢谢!使用此代码段从HTML片段中提取文本:`lxml.html.fromstring('some HTML fragment').text_content()` (3认同)
  • 这应该是公认的答案。使用正则表达式来解析 HTML(尤其是直接来自互联网)是一个非常**坏**的主意! (2认同)