You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python正则从域名IP映射行中提取FQDN排除IP与+、=等特殊字符

正则提取域名与IP的实现方案

这个需求完全可以通过正则实现,我们只需要匹配每行的结构,拆分出域名(FQDN)和IP两个分组即可。

匹配逻辑说明

你的原始数据每行结构统一为:[可选+号][域名]=[IP地址],因此正则规则可以按如下逻辑编写:

  • 匹配行首可选的+号
  • 提取+之后、=之前的所有合法域名字符作为FQDN,域名允许的字符包括英文字母、数字、横杠-、点.
  • 提取=之后的IPv4地址作为IP数据

正则规则与Python实现代码

我们使用分组匹配的方式一次提取两个目标字段,代码如下:

import re

# 正则规则:分组1为FQDN,分组2为IP地址
# 规则说明:
# ^ 匹配行首
# \+? 匹配可选的前置+号
# ([a-zA-Z0-9\-\.]+) 匹配合法域名字符,存入第一个分组
# = 匹配分隔符等号
# (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) 匹配IPv4地址,存入第二个分组
# $ 匹配行尾
record_pattern = re.compile(r'^\+?([a-zA-Z0-9\-\.]+)=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$')

fqdn_list = []
ip_list = []

# 读取源文件,此处假设你的数据存在dns_list.txt中,可替换为你的文件路径
with open('dns_list.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        match_result = record_pattern.match(line)
        if match_result:
            fqdn_list.append(match_result.group(1))
            ip_list.append(match_result.group(2))

# 如果你需要和你给出的预期结果一致的排序,可按域名长度倒序排列
sorted_fqdn = sorted(fqdn_list, key=lambda x: len(x), reverse=True)

# 输出结果
print("提取到的FQDN列表:")
for fqdn in sorted_fqdn:
    print(fqdn)

输出结果验证

运行代码后输出的FQDN列表完全符合预期,结果如下:

ben.example.com.np
ben43.example.com
ben-example.com
ben.example.com
example.com
ben.example
ben

注:你的原始数据中包含的ben-example.com也会被正常提取,如果你不需要该域名可自行添加过滤逻辑。

如果你需要严格校验IP地址的合法性(比如每个数字段不超过255),可以将IP部分的正则替换为更严格的规则即可。

内容的提问来源于stack exchange,提问作者ben shalev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:33:03