📅  最后修改于: 2023-12-03 15:42:14.509000             🧑  作者: Mango
在一个Web应用中,用户输入一串字符串,需要判断该字符串是否是一个合法的URL,并且给出合法的URL的规范形式。
判断输入的字符串是否是一个合法的URL,可以使用正则表达式来实现。常见的URL格式为:
scheme://host:port/path?query
其中:
scheme
表示协议,通常为 http
或 https
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