首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用RegEx删除特定协议的所有链接

用RegEx删除特定协议的所有链接
EN

Stack Overflow用户
提问于 2022-01-21 16:46:31
回答 1查看 59关注 0票数 -1

我希望从文本中删除所有链接,并将它们替换为以“示例://”和“示例_2://”协议开始的替代。所有其他环节应保持不动。

下面的regex将替换所有链接,尽管我限制了链接类型:

代码语言:javascript
复制
(\<a).+?(example|example_two)?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))(.+?)</a>+"

是否有人建议将regex按预期的方式工作?

EN

回答 1

Stack Overflow用户

发布于 2022-01-21 18:55:21

根据链接中允许的字符,这应该可以工作:

代码语言:javascript
复制
import re

link1 = r'<a href=example_two://path.com/to/something?and_some_parameters=1234&and_ano%20ther_one=asdf />'
link2 = r'<a> href="example_two://path.com/to/something?and_some_parameters=1234&and_another_one=asdf"</a>'

pattern = re.compile(r"(?P<before>(?:(?P<opening><a>)|<a).*)(?:example|example_two)://[a-zA-Z0-9_/.=%?&$:;#,<>]*(?P<after>.*(?(opening)</a>|/>))")

print(pattern.sub(r"\g<before>https://stackoverflow.com\g<after>", link1))
print(pattern.sub(r"\g<before>https://example.com\g<after>", link2))

# Prints:
# <a href=https://stackoverflow.com/>
# <a> href="https://example.com"</a>

这将获取链接之前的任何内容,并将其放入before组中,在after组中的链接之后放置任何内容,然后替换pattern.sub中的完全匹配。替换是beforeafter组中匹配的连接,替换链接位于中间。

此外,结束标签是以开始标签为条件的。如果开始标记为<a>,则匹配的结束标记为</a>,否则将匹配/>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70804746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档