📜  门| Gate IT 2008 |问题6(1)

📅  最后修改于: 2023-12-03 15:42:14.509000             🧑  作者: Mango

门| Gate IT 2008 |问题6

问题描述

在一个Web应用中,用户输入一串字符串,需要判断该字符串是否是一个合法的URL,并且给出合法的URL的规范形式。

程序分析

判断输入的字符串是否是一个合法的URL,可以使用正则表达式来实现。常见的URL格式为:

scheme://host:port/path?query

其中:

  • scheme 表示协议,通常为 httphttps
  • host 表示主机名或IP地址
  • port 表示端口号(可选,默认为80)
  • path 表示资源路径(可选,默认为根路径/)
  • query 表示查询参数(可选)

利用正则表达式来匹配URL,一个简单的实现如下:

import re

def is_valid_url(url):
    pattern = '^https?://[^\s/$.?#].[^\s]*$'
    return re.match(pattern, url) is not None

对于合法的URL,我们需要将其转换为规范形式。一个常见的规范形式如下:

scheme://host/path?query

对于非法的URL,我们可以返回一个空字符串。实现如下:

def normalize_url(url):
    if not is_valid_url(url):
        return ""

    # 提取出各个部分
    scheme, rest = url.split("://")
    host, *path_query = rest.split("/")
    path_query = "/".join(path_query)

    # 将端口号从host中提取出来
    if ":" in host:
        host, port = host.split(":")
        port = ":" + port
    else:
        port = ""

    # 拼接成规范形式
    return f"{scheme}://{host}{port}/{path_query}"
示例
url = "https://www.baidu.com/s?ie=UTF-8&wd=python"
if is_valid_url(url):
    print(normalize_url(url))
else:
    print("Invalid URL")

输出:

https://www.baidu.com/s?ie=UTF-8&wd=python
参考资料