Python 正则表达式提取 URL 域名的方法与实战解析

代码笔记1周前更新
2,010 0

🔍 如何使用正则表达式从 URL 中提取域名(含端口号)

在 Web 编程、日志分析、数据清洗中,从 URL 中提取域名是一个常见且实用的操作。比如我们有这样一些地址:

  • http://www.baidu.com

  • https://abc.def.example.com:8080/index.html

我们希望能从中准确提取出主机名部分(如 www.baidu.comabc.def.example.com:8080)。这时候,使用 Python 的 re 模块配合正则表达式就是最佳选择。

Python 正则表达式提取 URL 域名的方法与实战解析

Python 正则表达式提取 URL 域名的方法与实战解析


🧠 域名构成要素简析

在构造正则前,我们需要理解一个标准域名可能包含哪些部分:

  • 主机名:如 www.

  • 二级/三级域名:如 abc.def.

  • 顶级域名:如 .com

  • 可选端口号:如 :8080

英文域名允许出现的字符包括:

  • 英文字母(大小写)

  • 数字(0-9)

  • 连字符 -

  • 点号 .

  • 可选的端口(如 :443


✅ 正则表达式示例

下面是一个用于提取 URL 中域名部分的正则表达式:

re.search(r'http(s)?://([\w\-\.]+)\w+(:\d{1,5})?', url)
Python

📌 正则含义逐步拆解:

  • http(s)?://:匹配以 http:// 或 https:// 开头的协议头

  • ([\w\-\.]+):匹配由字母、数字、下划线、连字符、点号组成的主机名

  • \w+:确保末尾是合法域名字符(避免以点号或破碎字符结尾)

  • (:\d{1,5})?:匹配可选的端口号,如 :80:443


🧪 实战测试代码

import re

url = "https://abc.def.example.com:8080/index.html"
match = re.search(r"http(s)?://([\w\-\.]+\w+)(:\d{1,5})?", url)

if match:
    domain = match.group(2)
    port = match.group(3) if match.group(3) else "默认端口"
    print(f"提取到的域名:{domain}")
    print(f"端口信息:{port}")
else:
    print("URL格式不正确")
Python

输出:

提取到的域名:abc.def.example.com
端口信息::8080
ini

✅ 总结

通过正则表达式,可以高效从 URL 中提取域名、端口等关键字段,非常适合用于:

  • 日志分析(提取来源域)

  • 数据清洗(统一格式)

  • 安全检测(识别来源主机)

当然,如果你的 URL 更复杂(含用户名密码、锚点参数等),建议使用 urllib.parse 模块进行更精细解析。

© 版权声明

暂无评论

本文暂时没有评论,来添加一个吧(●'◡'●)