网址匹配正则表达式(python实现)

网址匹配正则表达式(python实现)

正则表达式部分如下:

python 复制代码
pattern = re.compile(
    r'^(?:http|ftp)s?://'       # http:// or https:// or ftp:// or ftps://
    r'(?:\S+(?::\S*)?@)?'       # 可选的 用户:密码@ 部分
    r'(?:'                      # 开始匹配域名
    r'[A-Z0-9.-]+\.[A-Z]{2,6}'  # 规范的域名,如 example.com
    r'|'                        # 或者
    r'localhost'                # 本地 localhost
    r')'                        # 域名结束
    r'(?::\d{2,5})?'            # 可选的端口号,如 :8080
    r'(?:/?|[/?]\S+)$',         # 可选的路径和查询参数,如 /path 或 /path?query=1
    re.IGNORECASE               # 不区分大小写
)
分段解释
  • r'^(?:http|ftp)s?://':该部分匹配 URL 的协议部分,支持 http://https://ftp://ftps://。其中,s? 表示 s 是可选的,这使得该部分可以匹配带有或不带有 s 的 URL。

  • r'(?:\S+(?::\S*)?@)?':这个部分用于匹配可选的用户信息,即 用户:密码@,这是用于带有身份验证的 URL 的常见格式。? 表示这一部分是可选的,不一定会出现在 URL 中。

  • r'(?:[A-Z0-9.-]+\.[A-Z]{2,6}|localhost)':该部分匹配域名:

    • [A-Z0-9.-]+\.[A-Z]{2,6}:匹配像 example.com 这样的域名,.com 的后缀部分可以是 2 到 6 个字母(如 .com.org.net 等)。
    • localhost:专门处理 localhost 的情况,这是在本地开发时常用的 URL。
  • r'(?::\d{2,5})?':这个部分用于匹配可选的端口号(例如 :8080),其中端口号的位数可以是 2 到 5 位。该部分也是可选的。

  • r'(?:/?|[/?]\S+)$':这个部分匹配 URL 的路径或查询参数部分,可能为空,或者可以是类似 /path/path?query=1 的格式。

  • re.IGNORECASE:这是正则表达式的一个标志,它指定正则表达式在匹配时不区分大小写。

这个正则表达式涵盖了协议、用户信息、域名、端口号、路径等各个 URL 的组成部分,能够处理大多数常见的 URL 格式。

相关推荐
用户78937733908535 分钟前
Docker 部署踩坑记录:从“构建失败”到“服务跑通”,以及为什么数据被清空了
python·docker
再玩一会儿看代码7 分钟前
如何理解神经网络中的权重参数?从一张图看懂模型参数量计算
人工智能·经验分享·python·深度学习·神经网络·机器学习
2301_779622419 分钟前
mysql如何通过主从备份实现读写分离_配置mysql架构模式
jvm·数据库·python
杨凯凡11 分钟前
【032】排查入门:jstack、heap dump、Arthas 初识
java·开发语言·后端
其实防守也摸鱼13 分钟前
无线网络安全--实验 规避WLAN验证之发现隐藏的SSID
java·开发语言·网络·安全·web安全·智能路由器·无线网络安全
m0_7411733315 分钟前
HTML5中WebSocket在弱网环境下的延迟抖动算法补偿
jvm·数据库·python
l1t15 分钟前
astral-sh发布的musl和gnu版本standalone python 性能比较
开发语言·python
2401_8714928520 分钟前
Pandas如何做时间差对齐_pd.merge_asof按最近的时间戳合并两表
jvm·数据库·python
sg_knight36 分钟前
Python 设计模式:迭代器模式——用优雅的方式遍历一切
python·设计模式·迭代器模式
阿豪只会阿巴1 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——Turbo Blog 项目学习与上线指南
开发语言·python·学习·状态模式