如何用正则表达式提取接口类型与编号并排除Trunk、LoopBack接口
解决接口提取并排除指定类型的正则方案
要提取符合要求的接口信息,核心是通过负向预查排除Trunk和LoopBack类型,同时适配两种接口格式(带空格如Ethernet 2/0/0、无空格如vlan12)。
最终正则表达式
^interface (?!Trunk|LoopBack)([a-zA-Z0-9\-\/]+(?:\s[0-9\-\/]+)?)
正则拆解
^interface:匹配行首的interface关键字及后续空格,确保只处理接口定义行(?!Trunk|LoopBack):负向预断言,确保后续内容不以Trunk或LoopBack开头,直接排除这两类接口([a-zA-Z0-9\-\/]+(?:\s[0-9\-\/]+)?):捕获目标接口信息:[a-zA-Z0-9\-\/]+:匹配接口类型(如Ethernet、vlan)(?:\s[0-9\-\/]+)?:可选匹配空格加编号部分(如2/0/0),非捕获组避免额外分组,?适配无空格的格式(如vlan12)
测试验证
针对你提供的命令示例:
interface Ethernet 2/0/0 xxxx
interface vlan12 xxxx
interface Trunk10 xxxx
interface LoopBack 1/0/0 xxxx
正则会成功捕获:
Ethernet 2/0/0vlan12
自动排除Trunk10和LoopBack 1/0/0。
使用示例(Python)
import re commands = [ "interface Ethernet 2/0/0 xxxx", "interface vlan12 xxxx", "interface Trunk10 xxxx", "interface LoopBack 1/0/0 xxxx" ] pattern = re.compile(r'^interface (?!Trunk|LoopBack)([a-zA-Z0-9\-\/]+(?:\s[0-9\-\/]+)?)') for cmd in commands: match = pattern.search(cmd) if match: print(match.group(1))
输出结果:
Ethernet 2/0/0 vlan12
内容的提问来源于stack exchange,提问作者Gao Ken
相关产品推荐
相关产品推荐

