热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python超链接格式_字符串转超链接格式

首先使用https:regex101.com网站来一步步帮忙调试域名链接包括以下几种形式http:www.sina.comhttps:www.sina.comhttp:news.s

首先使用https://regex101.com/网站来一步步帮忙调试

域名链接

包括以下几种形式

http://www.sina.com

https://www.sina.com

http://news.sina.com

www.sina.com

news.sina.com

sina.com

先来一个链接的基本格式

((http(s)?:\/{2})?((www|\w+)\.)?[a-zA-Z0-9]+\.[a-zA-Z0-9]+(.cn)?

对应的说明如下

((http(s)?:\/{2})?用于匹配http://或者https://

((www|\w+)\.)?一级或者二级域名名字,比如www.sina.com中的www和news.sina.com中的news,这块内容也是可有可无的,因为有时候也可以简写为sina.com

[a-zA-Z0-9]+\.[a-zA-Z0-9], 对应域名,比如sina.com或者163.net

(.cn)? 特别处理一下,有的域名带cn结束的

有的legacy字符串已经包含了超链接的markdown格式,这种情况我们需要从匹配里去除掉,可以用开始操作符?

我们不希望包含以[和(开始的以及]和)结束的超链接,以避开[http://www.sina.com] (http://www.sina.com]以及[新浪] (www.sina.com)这两种情况

格式如下

(?

这样有一个问题, www.sina.co会被匹配到,因为http://并不是必须的,它就不匹配这个选项,从中间开始匹配了, 添加(?

这样又出现了一个新的问题,ww.sina.co被匹配到了。

综合考虑各种情况,正常链接表达式前面不应该有字符,所以修改匹配为(?

最终的匹配表达式如下

(?

代码如下

import re

str = "http://www.sina.com words between http://www.sina.com.cn words between http://this/is/folder/ words between [http://www.soho.com](http://www.soho.com) [http://www.sina.com](http://www.sina.com) [THIS CAN't](http://www.sina.com) www.yahoo.com www.yahoo.com.cn"

re_str = "(?

def func(elem):

return "[{0}]({0})".format(elem.group(0))

str = re.sub(re_str, func, str)

print(str)

运行结果为

[http://www.sina.com](http://www.sina.com) words between [http://www.sina.com.cn](http://www.sina.com.cn) words between http://this/is/folder/ words between [http://www.soho.com](http://www.soho.com) [http://www.sina.com](http://www.sina.com) [THIS CAN't](http://www.sina.com) [www.yahoo.com](www.yahoo.com) [www.yahoo.com.cn](www.yahoo.com.cn)

另外一种实现方法

import re

str = "http://www.sina.com words between http://www.sina.com.cn words between http://this/is/folder/ words between [http://www.soho.com](http://www.soho.com) [http://www.sina.com](http://www.sina.com) [THIS CAN't](http://www.sina.com) www.yahoo.com www.yahoo.com.cn"

re_str = "(([^\[\(\s])?(http(s)?:\/\/)?(www.)+[a-zA-Z0-9]+\.[a-zA-Z0-9]+(.cn)?)"

rule = re.compile(re_str)

print(re.findall(rule, str))

str_list = []

for www in re.findall(rule, str):

if not www[0].strip() in str_list:

str_list.append(www[0].strip())

# str_list.sort(key=lambda elem:len(elem), reverse=True) # .cn

print(str_list)

for www in str_list:

new_format = "[{0}]({0})".format(www)

str = str.replace(new_format, www)

str = str.replace(www, new_format)

new_format2 = "([{0}]({0}))".format(www)

str = str.replace(new_format2, "({0})".format(www))

print(str)

文件路径

包括以下几种格式

https://kubernetes.io/docs/tutorials/

http://this/is/folder/

http://this/is/folder/:8000

要注意一下几点

跟上面一样,不能处理[]()里的链接

字符串中间可以支持以下特殊字符

/域名分段

%中文字符

.多级域名

:端口

其他支持的连接符-+

我让这个链接必须以http开始了,否则匹配表达式太复杂。所以,它基本可匹配上面的表达式,除了www.sina.com这类的. 但是从另一方面考虑,www.sina.com这种也不该匹配,这样便于处理一些非超链接的匹配格式和一些不打算转换的场景。

表达式如下

(?

保险起见,我在最后加了不允许以/.结束,这个理论上在前面已经匹配好了,可能是多余的

地址链接

包括以下形式

http://127.0.0.1:8000

127.0.0.1:8000

127.0.0.1

匹配字符串如下

(?

工具网站

https://regex101.com/

https://www.regextester.com/95226

评论

留言请先登录或注册!



推荐阅读
  • vue使用
    关键词: ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
author-avatar
那0年_277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有