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])
代码细节解释
- 正则表达式:
r'Hostname (\S+) version (\S+)'\S+用来匹配任意非空白字符序列,刚好对应路由器名(比如Router1)和版本号(比如15.01)findall()方法会返回所有匹配的分组列表,每个元素是一个包含Hostname和Version的元组
- CSV写入逻辑:先写入表头,再遍历所有匹配结果,确保每一对Hostname和Version对应CSV的一行
预期输出
运行代码后,output.csv的内容应该是:
Hostname,Version Router1,15.01 Router2,15.02
如果之前你用的是search()方法,那只会匹配第一个条目,这也是结果不符合预期的常见原因哦~
内容的提问来源于stack exchange,提问作者venkat
相关产品推荐
相关产品推荐

