regex替换列表中的html href和u标记(python)

2024-03-28 11:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,我有一个包含如下字符串项的列表:

My website is <a href="WEBSITE1" target='_blank'><u>WEBSITE1</u></a> 
The link is <a href="LINK1" target='_blank'><u>LINK1</u></a> 
...

我要做的是替换(在每个列表项中)href语法,只留下链接作为文本,这样我的列表将如下所示:

^{pr2}$

我在考虑匹配和替换此正则表达式:

<a href="(.*?)" target='_blank'><u>(.*?)</u></a> 

有:

(.*?)

但它不起作用。这似乎很复杂。有没有什么简单的方法可以将一个列表对象与已清理的项目作为输出?在


Tags: the字符串文本target列表is链接my
3条回答

您也可以使用HTML解析器处理字符串,例如^{},它的replace_with()-查找字符串中的所有a元素并用链接文本替换它们:

>>> from bs4 import BeautifulSoup
>>> l = [
...     """My website is <a href="WEBSITE1" target='_blank'><u>WEBSITE1</u></a>""",
...     """The link is <a href="LINK1" target='_blank'><u>LINK1</u></a>"""
... ]
>>> for item in l:
...     soup = BeautifulSoup(item, "html.parser")
...     for a in soup("a"):
...        a.replace_with(a.text)
...     print(str(soup))
... 
My website is WEBSITE1
The link is LINK1

或者,正如@user3100115在评论中指出的,只需获取“soup”对象的文本也可以处理示例数据:

^{pr2}$

如果我必须使用正则表达式,我会使用类似

<a href.*?><u>(.*?)<\/u><\/a>

然后替换为列表理解

^{pr2}$

但是考虑使用beautifulsoup或其他html解析器,正如其他答案中所指出的那样,这将为您提供一个更通用的解决方案

正则表达式解释

  • <a href.*?>匹配a href标记,非贪心,直到第一个右括号
  • <u>匹配u标记
  • (.*?)匹配要保留的字符串
  • <\/u><\/a>匹配结束标记

这个正则表达式似乎有效

([^<]+)<a\s+href\s*=\s*"([^"]+).*

Regex Demo

Python代码

^{pr2}$

Ideone Demo

相关问题 更多 >