Python删除源中的某些元素

标签 python regex

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

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

比如遇到的时候:

<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)

最佳答案

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

您可以简单地使用 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>

Note: This will replace all <a>, </a> and <img> elements (including content) that are inside of a <p> element leaving the rest untouched. If you have BS4, use find_all() and replace_with()

关于Python删除源中的某些元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20843434/

相关文章:

python - 解析 XML 模板标签的正则表达式

javascript - 不使用正则表达式匹配嵌套出现的情况

javascript - 在selenium python中仅选择带有标题标签的Web元素

python - 解决 python 正则表达式 bug^H^H^H...咳咳...需要错误功能

python - python 子进程模块古怪吗?

python - 为什么在有上下文和没有上下文的情况下捕获异常关闭打开的文件?

regex - 使用正则表达式查找字符串并删除整行

java - 如何从这个正则表达式生成所有可能的数字?

python - Python从邮件中提取域名(包括几个特例)

python - 如何在 moviepy 中创建包含多个文本的 textClip?