Python 正则表达式处理HTML
我需要替换网页源代码中的所有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).)*?> 这应该适用于您的情况。负前瞻将确保未拾取 编辑: )))*?> 如果你有这样荒谬的事情,
,,等等),但我希望保留
和
。我试过:
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\/?>)[^<>]*>