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

Python正则表达式代码输出异常,提取Hostname与version至CSV遇问题

解决从配置文本提取Hostname和Version并写入CSV的问题

看起来你遇到的核心问题是正则表达式没正确捕获每一对Hostname和对应Version,或是写入CSV时逻辑出了问题。咱们先拆解下你的输入文本结构:

Hostname Router1 version 15.01 code: line console 0 logging synchronous exec-timeout 15 1 usb-inactivity-timeout 15 exec prompt timestamp transport preferred none Hostname Router2 version 15.02 line vty 0 15 logging synchronous exec-timeout 15 2 exec prompt timestamp transport ...

能看到每个路由器的标识都是Hostname [路由器名] version [版本号]的格式,后面跟着一堆配置内容,直到下一个Hostname出现。

常见问题排查点

  • 你可能用了search()而非全局匹配方法,导致只捕获到第一个Hostname和Version
  • 正则表达式的分组规则不对,捕获了错误的内容
  • 写入CSV时没正确遍历所有匹配结果,只写入了单条数据

可直接运行的解决方案代码

下面是经过验证的Python代码,能正确提取所有目标字段并写入CSV:

import re
import csv

# 读取输入的txt文件内容
with open('input.txt', 'r') as f:
    content = f.read()

# 正则匹配规则:精准捕获Hostname后的路由器名,以及version后的版本号
pattern = re.compile(r'Hostname (\S+) version (\S+)')
# 全局匹配所有符合规则的条目
matches = pattern.findall(content)

# 写入CSV文件
with open('output.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    # 先写入表头
    writer.writerow(['Hostname', 'Version'])
    # 遍历所有匹配结果,逐行写入
    for hostname, version in matches:
        writer.writerow([hostname, version])

代码细节解释

  1. 正则表达式:r'Hostname (\S+) version (\S+)'
    • \S+用来匹配任意非空白字符序列,刚好对应路由器名(比如Router1)和版本号(比如15.01)
    • findall()方法会返回所有匹配的分组列表,每个元素是一个包含Hostname和Version的元组
  2. CSV写入逻辑:先写入表头,再遍历所有匹配结果,确保每一对Hostname和Version对应CSV的一行

预期输出

运行代码后,output.csv的内容应该是:

Hostname,Version
Router1,15.01
Router2,15.02

如果之前你用的是search()方法,那只会匹配第一个条目,这也是结果不符合预期的常见原因哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:44:34