【问题标题】:Python remove certain elements in sourcePython 删除源代码中的某些元素
【发布时间】:2013-12-30 16:26:28
【问题描述】:

我有一些来源试图删除一些标签,我知道不建议使用正则表达式来删除标签,但我认为这将是最简单的方法。

我需要做的是删除所有imga 标记以及a 标记的内容onlyp 标记内,但我不确定如何使用正则表达式来做到这一点。

比如遇到的时候:

<p><img src="center.jpg"><a href="?center">center</a>TEXT<img src="right.jpg"><a href="?rightspan">right</a> MORE TEXT<img src="another.jpg"></p>

输出应如下所示,其中所有a 标记和内容以及img 标记均已删除。

<p>TEXT MORE TEXT</p>

问题就像我说我不确定如何执行此操作,并且我的正则表达式删除了源中aimg 标记的所有,而不仅仅是那些在p 标签内。

re.sub(r'<(img|a).*?>|</a>', '', text)

【问题讨论】:

  • “但认为这将是最简单的路线” - 好吧,正如您所见,这并不容易。那为什么不尝试其他路线呢? :)
  • 这里是乘坐Remove all <a> tags的更便捷路线。
  • 我会第一个说this,并推荐the standard library(或美汤)的精彩工具。
  • 感谢所有链接和参考。我现在知道不要使用正则表达式,因为使用解析器要容易得多。

标签: python regex


【解决方案1】:

您的正则表达式确实会在不使用某种断言的情况下删除所有标签。尽管您可以使用正则表达式来执行此操作,但出于多种原因,我建议您不要走这条路。

您可以简单地使用BeautifulSoup 传递要删除的内容列表。

>>> from BeautifulSoup import BeautifulSoup
>>> html = '<p><img src="center.jpg"><a href="?center">center</a>TEXT<img src="right.jpg"><a href="?rightspan">right</a> MORE TEXT<img src="another.jpg"></p>'
>>> soup = BeautifulSoup(html)
>>> for m in soup.findAll(['a', 'img']):
...   if m.parent.name == 'p':
...      m.replaceWith('')

>>> print soup

<p>TEXT MORE TEXT</p>

注意:这将替换 &lt;p&gt; 元素内的所有 &lt;a&gt;, &lt;/a&gt;&lt;img&gt; 元素(包括内容),其余部分保持不变。如果您有BS4,请使用find_all()replace_with()

【讨论】:

  • 注意到你的好正则表达式并在你的一些旧帖子中寻找要学习的东西......并为此 +1 以获得与正则表达式无关的指导性解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 2019-11-09
  • 2020-02-13
  • 2022-08-16
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多