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

Python正则表达式求助:如何从指定SNMP字符串提取IP地址

提取SNMP字符串中的IP地址解决方案

嘿,作为Python新手遇到正则匹配的问题太正常了,我来帮你捋一捋~

首先看你提供的目标字符串:

SNMPv2-SMI::mib-2.15.3.1.2.10.10.10.10 = 6

你原来写的正则有两个关键小问题:

  • 正则里2\.后面加了空格,但原字符串中2.是直接跟IP的,没有空格,这会导致匹配失败;
  • 前面的匹配规则写得太死板(比如硬编码[A-Z]+\w\d\W[A-Z]+::[a-z]+-2),万一OID格式有小变动,正则直接就失效了。

下面给你两种实用的解决方法,选哪种都能精准拿到想要的IP:

方法一:用正则匹配通用IPv4地址

这种方法更通用,不管OID前面怎么变,只要字符串里有标准的IPv4地址,就能抓出来:

import re

line = "SNMPv2-SMI::mib-2.15.3.1.2.10.10.10.10 = 6"
# 匹配标准IPv4地址的正则表达式
ip_match = re.search(r'\b(?:\d{1,3}\.){3}\d{1,3}\b', line)
if ip_match:
    peerip = ip_match.group()
    print(peerip)  # 输出:10.10.10.10

解释一下:\b是单词边界,确保我们匹配的是一个完整的IP,而不是OID里零散的数字段;(?:\d{1,3}\.){3}匹配前三段带点的数字,最后加上\d{1,3}匹配第四段数字,刚好符合IPv4的格式规则。

方法二:用字符串分割(更直观,适合固定格式)

如果你确定所有待处理的字符串格式都和示例一致(IP在2.之后、=之前),用字符串分割会更简单,新手也更容易理解:

line = "SNMPv2-SMI::mib-2.15.3.1.2.10.10.10.10 = 6"
# 第一步:按"2."分割字符串,取最后一段(包含IP和后面的内容)
after_2_dot = line.split("2.")[-1]
# 第二步:按" = "分割,取前面的部分就是目标IP
peerip = after_2_dot.split(" = ")[0]
print(peerip)  # 输出:10.10.10.10

这两种方法都能完美解决你的问题,根据实际场景选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:21:29