基于目标地址匹配Cisco配置行的正则表达式问题排查
问题分析与解决
你的代码运行无结果,核心问题出在ip正则的锚点上:
- 你定义的
ip = r"(^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$)"包含^(字符串开头)和$(字符串结尾)锚点,这会要求每个IP必须是独立的完整字符串,但在ip route命令行中,IP只是行内的一部分,所以正则无法匹配。 - 直接用空格分隔还可能不兼容Cisco配置中偶尔出现的多空格情况。
修正后的代码
import re acl = 'ip route 10.5.48.0 255.255.255.0 10.242.245.65' firewall = '10.242.245.65' # 去掉^$锚点,匹配行内的IP片段 ip = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" # 用\s+匹配一个或多个空格,兼容多空格场景 ip_route = f"ip route {ip}\s+{ip}\s+{firewall}" if re.search(ip_route, acl): print(acl)
更严谨的IP匹配(可选)
如果需要确保IP地址的每个段合法(0-255),可以替换ip正则为更精确的版本:
ip = r"(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)"
内容的提问来源于stack exchange,提问作者touriste77
相关产品推荐
相关产品推荐

