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

如何编写匹配show vlan输出的Python正则表达式?

解决show vlan输出的VLAN与端口提取问题

嘿,我来帮你搞定这个正则匹配的麻烦!你之前写的正则逻辑太零散,没法把VLAN号和对应的端口关联起来,自然得不到想要的结果。咱们一步步来修正:

问题分析

你的原始输出里,每个VLAN对应的端口是在同一行里的,比如1 inside up Et0/1, Et0/3, Et0/4, Et...,而你的正则是两个独立的分支,一个匹配VLAN开头部分,一个匹配端口,这就导致VLAN和端口没法对应,还处理不了一行里多个端口的情况。

正确解决方案

我们可以分两步处理:先抓取每个VLAN行里的VLAN号和端口列表字符串,再拆分端口列表,把每个端口和对应的VLAN号组合起来。

Python代码实现

import re

# 替换成你实际读取的文件内容
raw_output = """asa# Show switch vlan
VLAN  Name                             Status    Ports
----  -------------------------------- --------- -----------------------------
1     inside                          up        Et0/1, Et0/3, Et0/4, Et0/5, Et0/6, Et0/7
2     guest                           up        Et0/0
3     dmz                             up        Et0/2"""

# 匹配每行的VLAN号和端口列表
vlan_port_regex = re.compile(r'^(\d+)\s+\S+\s+\S+\s+(.+)$', re.MULTILINE)
match_results = vlan_port_regex.finditer(raw_output)

final_output = []
for match in match_results:
    vlan_id = match.group(1)
    ports_raw = match.group(2)
    # 拆分端口,过滤掉省略号和空内容
    ports = [p.strip() for p in ports_raw.split(',') if p.strip() and not p.strip().startswith('Et...')]
    # 组合VLAN和端口
    for port in ports:
        final_output.append(f"Vlan {vlan_id} {port}")

# 输出期望格式的结果
print(' '.join(final_output))

代码说明

  • re.MULTILINE参数让正则的^匹配每一行的开头,这样能准确抓取每个VLAN的行;
  • 正则^(\d+)\s+\S+\s+\S+\s+(.+)$:
    • (\d+):精准抓取VLAN号;
    • \s+\S+\s+\S+:跳过VLAN名称和状态这两列(都是非空白字符,中间用空格分隔);
    • (.+):抓取该行所有的端口内容;
  • 拆分端口列表时,处理了逗号分隔、空格,还过滤了原始输出里可能存在的省略号(比如Et...);
  • 最后把每个端口和对应VLAN号组合成你想要的格式。

运行这段代码后,输出结果完全符合你的期望:
Vlan 1 Et0/1 Vlan 1 Et0/3 Vlan 1 Et0/4 Vlan 1 Et0/5 Vlan 1 Et0/6 Vlan 1 Et0/7 Vlan 2 Et0/0 Vlan 3 Et0/2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:33:00