删除正则表达式中的 Html 标签 [重复]
Posted
技术标签:
【中文标题】删除正则表达式中的 Html 标签 [重复]【英文标题】:Remove the Html tags in regex [duplicate] 【发布时间】:2012-01-26 20:38:17 【问题描述】:可能重复:Strip html from strings in pythonRegEx match open tags except XHTML self-contained tags
我的 python 模块中有正则表达式模式,它从给定的字符串中删除 html 标记。
在这种情况下它不起作用。
输入字符串:
string=<li class="
tal
"><h3><a href="/aclk?sa=l&ai=CoS4y-Wz0TrnqC8y0rAfysK2DB46PiJECzoK8_yKPwd4FCAAQAigCUL7Kz4P9_____wFg5erjg5gOoAH0m_XuA8gBAakCoqvilYNWVD6qBB1P0Dm6CNzrf62IC36fDvUIh77EpeheIRdH_YEaPw&sig=AOD64_2z9xPK8vOxUCpIGTjBcc2Lg-GAeA&adurl=http://www.policybazaar.com/creditcards/creditcard-india.aspx%3Futm_source%3Dgoogle%26utm_medium%3Dppc%26utm_term%3DCreditcard_delhi_only%26utm_campaign%3Dcredit_card" id="pa2">Compare <b>Credit Cards</b> | PolicyBazaar.com</a></h3>Get Best <b>Credit Card</b> For Free, Now U Have a Choice, Choose wisely!<br /><cite>www.policybazaar.com/<b>credit</b>-<b>Cards</b></cite></li>
正则表达式模式:
In [64]:p = re.compile(r'<.*?>')
In [65]:text=p.sub('',str(string))
In [66]: text
Out[66]: '<li class="\n tal\n ">Compare Credit Cards | PolicyBazaar.comGet Best Credit Card For Free, Now U Have a Choice, Choose wisely!www.policybazaar.com/credit-Cards'
结果仍然有<li>
标签。无论此类名称和字符串模式如何,都应如何删除它。
【问题讨论】:
【参考方案1】:在这种情况下,您应该使用DOTALL
功能:
p = re.compile(r'<.*?>',re.DOTALL)
应该可以。
但是...您不应该使用正则表达式进行 HTML 解析,请参阅:https://***.com/a/1732454/11621
HTH。
【讨论】:
+1 但不是.*?
lazy-dot-star,一个更快、更准确的表达式应该是:p = re.compile(r'<[^>]*>')
,或者更好的是:p = re.compile(r"""<(?:[^<>"']+|"[^"]*"|'[^']*')*>""")
,它允许带有尖括号的属性.但正如其他人指出的那样,所有这些正则表达式仍然可能失败。最好使用专为这项工作设计的工具来解析 HTML(正如 Zsolt Botykai 在此答案中正确指出的那样)。
@ridgerunner TIL 关于属性中允许使用尖括号,哇 :-) 是的,你是对的,你的正则表达式更准确。我的只应该工作:-)【参考方案2】:
Google 或在 *** 上搜索 HTML 和正则表达式 - 这是个坏主意。您最好使用 Beautiful Soup 或其他一些真正的 HTML 解析器并修改 DOM。
【讨论】:
我使用 Beautiful Soup 进行 HTML 解析。效果很好。【参考方案3】:如果您只是想从字符串中删除所有 HTML,您可以查看以下内容:http://code.activestate.com/recipes/440481-strips-xmlhtml-tags-from-string/
【讨论】:
以上是关于删除正则表达式中的 Html 标签 [重复]的主要内容,如果未能解决你的问题,请参考以下文章