首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【python 正则表达式:太复杂了所以通过练习-3(URL 统一资源定位器)】编写常见格式的字符串的正则表达式来由浅入深的认识它

【python 正则表达式:太复杂了所以通过练习-3(URL 统一资源定位器)】编写常见格式的字符串的正则表达式来由浅入深的认识它

作者头像
flos chen
发布2026-01-23 15:20:15
发布2026-01-23 15:20:15
590
举报

5. URL 统一资源定位器

编写一个程序,从字符串中匹配 URL。
URL 的格式为:
  1. 协议名可以是 http、https、ftp。
  2. 域名可以是任意长度。
  3. 端口号可以是任意数字。
  4. 路径可以是任意长度。
  5. 参数可以是任意长度。
  6. 锚点可以是任意长度。
代码如下:
代码语言:javascript
复制
import re
def match_url(string):
    pattern = r"^(http|https|ftp)://[a-zA-Z0-9]+\.[a-zA-Z0-9]+(:[0-9]+)?(/[a-zA-Z0-9]+)*(\?[a-zA-Z0-9]+=[a-zA-Z0-9]+)*(#[a-zA-Z0-9]+)?$"
    match = re.match(pattern, string)
    if match:
        return True
    else:
        return False
string = "http://www.example.com/path/to/page.html?param=value#anchor"
print(match_url(string)) # True
string = "https://www.example.com:8080/path/to/page.html?param=value#anchor"
print(match_url(string)) # True
string = "ftp://www.example.com/path/to/file.txt"
print(match_url(string)) # True

直接头皮发麻,不要慌,我们逐个解释

解释
  1. ^$ 是开始和结束的标志;
  2. 第一位必须是 (http|https|ftp) 中的某一个;
  3. 2、3、4位固定为 :\;
  4. 点号之前可以有任意数量的 [a-zA-Z0-9];
  5. 点号之后到最近的那个 ( 之前的部分也是;
  6. ( 开始后的部分,出现一个可选的部分,可选部分以 : 开始,加上任意数量的 [a-zA-Z0-9];
  7. ? 之后到 * 之前,以 / 开头,任意数量的 [a-zA-Z0-9],同时这样的格式可以有0-无限个;
  8. ‘*’ 到下一个 “**” 之前,? 开头,后面加上任意个 [a-zA-Z0-9] ,之后是一个 = 号,后面也是加任意个 [a-zA-Z0-9] ,同时这样的格式可以有0-无限个;
    • 之后,以 # 开头,任意数量的 [a-zA-Z0-9],同时这样的格式可以有0-无限个;
我们学到了什么
  1. 知道了开始和结束的标志是 ^ $;
  2. 知道了原来字符的位置有如此严格的占位限制;
  3. 知道了 () 对表达式进行分组, | 是一个选择标志;
  4. 知道了 a-zA-Z0-9 区间可以这样的连接起来写;
  5. 知道了 + 代表匹配前一位的字符1-无限次,且要写在需要匹配的字符后一位;
  6. 知道了 . 代表字符 . ,\是为了转义;
  7. 知道了 ?在表达式后表示这样的格式可以有或者没有;
  8. 知道了 * 代表匹配前一位的字符0-无限次,且要写在需要匹配的字符后一位;

欢迎留言讨论。

下一部分 待定

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5. URL 统一资源定位器
    • 编写一个程序,从字符串中匹配 URL。
    • 代码如下:
    • 解释
    • 我们学到了什么
  • 欢迎留言讨论。
  • 下一部分 待定
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档