Python 正则表达式处理HTML

Python 正则表达式处理HTML,python,html,regex,Python,Html,Regex,我需要替换网页源代码中的所有HTML标记(例如,,等等),但我希望保留和。我试过: re.sub(r'<[^>]+?>', u'', html, flags=re.I) re.sub(r']+?>',u'',html,flags=re.I) 这只实现了第一个目标,但不能保持或r'br]+?>“也无法实现目标 什么是正确的正则表达式? <((?!\bbr\b).)*?> 这应该适用于您的情况。负前瞻将确保未拾取 编辑: )))*?> 如果你有这样荒谬的事情,

我需要替换网页源代码中的所有HTML标记(例如
,等等),但我希望保留


。我试过:

re.sub(r'<[^>]+?>', u'', html, flags=re.I)
re.sub(r']+?>',u'',html,flags=re.I)
这只实现了第一个目标,但不能保持


r'br]+?>“
也无法实现目标

什么是正确的正则表达式?


<((?!\bbr\b).)*?>
这应该适用于您的情况。负前瞻将确保未拾取

编辑:

)))*?>

如果你有这样荒谬的事情,试试这个<代码>

下面带有负前瞻断言的正则表达式可以工作

<(?!br\/?>)[^<>]*>
)[^]*>

不要使用正则表达式来处理HTML-HTML不是一种正则语言。使用HTML解析器。()@jonrsharpe我知道你指的是BeautifulSoup等,但我不想为这个简单的问题安装另一个插件。标准库中也有一个解析器:。总有一天人们会停止用锤子拧螺栓(也称为用正则表达式解析html)?我对你问的另一个问题有正确的答案,因为某种原因你删除了它
re.sub(r“(()+)”,“
”,html,flags=re.I | re.UNICODE)
您遇到的问题是您遗漏了
flags
关键字,因此它将
re.I | re.UNICODE
作为
计数,将其仅限于前33个替换项,这使得它看起来好像什么都没有发生,因为您只查看了输入文本的最后一行。我在这里回答是因为无法向您发送答案。这不起作用。)+?>。保留了一些其他标记。仍然删除了所有标记(包括

)。这个消极的前瞻正确吗?你似乎犯了一个小错误。这是有效的:
])+?>
您包括一个额外的
为什么包括
\/br
?只有三种版本的
br



你最好在回答中使用
消极的前瞻
而不是
前瞻
,这样新手就不会感到困惑了。只是我谦虚的建议。前瞻是正则表达式中最困难的部分之一。
<(?!br\/?>)[^<>]*>