【问题标题】:Removing html hyperlinks anchor from text with regex (in python, pyqt4)使用正则表达式从文本中删除 html 超链接锚(在 python,pyqt4 中)
【发布时间】:2013-08-16 14:41:35
【问题描述】:

在我的 QTextBrowser 中,我使用

检测到像“www.test.com”这样的链接
re.compile(   r"(\b(?:(?:https?|ftp|file)://|www\.|ftp\.)[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|])"   )

当 QTextBrowser 上发生进一步的操作时,将再次使用 text.toHtml() 接收文本,然后再次对其进行解析。这会导致级联超链接。

所以我想在再次解析之前删除超链接 HTML。例如,文本看起来像

<a href="www.test.com">www.test.com</a> 

第一次解析后应该看起来像

www.test.com

在第二次解析之前,防止级联。

如何删除

<a href="SOMETHING"> and </a>

使用正则表达式?

不应删除粗体或斜体等其他 html 标记。#

编辑

我听说过不使用正则表达式解析 HTML,但我认为这里应该是可能的,我不想在我的程序中进一步依赖。

【问题讨论】:

  • 您可以使用re.sub 删除那些&lt;a&gt; 标记。你只需要得到表达式。你有没有尝试过?
  • 是的,我使用 re.sub 来交换超链接。但我不知道如何在正则表达式中获取“东西”。第二种方法可能是,在第一个长正则表达式中添加一个术语,它会忽略其中已经包含“a href”的表达式,但它不起作用。我用 (?
  • 您必须删除它们吗?为什么不直接使用正则表达式来捕获两者之间的内容?
  • 我当前的实现是这样的:如果检测到 'www.test.com',它会生成一个 'www.test.com出它。然后在第二次解析时,它被级联,形成 'www.test.comwww.test.com 或类似的。不知何故,我必须通过首先删除“a hrefs”或将其从第一个正则表达式中排除来解决这个问题。级联发生是因为大的正则表达式搜索以 www 开头的术语。或 http:
  • 等等...这是否意味着第二次(或第一次)解析没有按预期进行?从源头上修复代码而不是使用另一个解析器来撤消发生的任何错误不是更好吗!?

标签: python html regex


【解决方案1】:

我会考虑使用BeautifulSoup 来完成这项任务。

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(html)
>>> for m in soup.find_all('a'):
...     m.replaceWithChildren()
>>> print soup

【讨论】:

  • 好吧,似乎使用 RegEx 解析 Html 并不是这个星球上最好的主意。将对此进行更深入的研究。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2013-06-15
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多