如何使用Python正则表达式检测IP地址中连续递增的4个octet
检测IPv4地址octet连续递增的实现方案
纯正则本身不支持动态数值运算逻辑,硬用|暴力枚举虽然可行,但灵活性差,更推荐用「IP拆分+逻辑判断」的方案实现,性能更高且易维护。
最优实现方案
核心思路是先提取IP的四个octet转成整数,再校验是否满足严格连续递增的规则,代码如下:
def is_strictly_increasing_ip(ip: str) -> bool: # 尝试将IP拆分并转换为整数列表 try: octets = list(map(int, ip.split("."))) except ValueError: # 存在非数字的octet,直接返回不匹配 return False # 先校验是否为合法IPv4地址 if len(octets) != 4 or any(o < 0 or o > 255 for o in octets): return False # 校验四个octet是否连续递增(后一项 = 前一项 + 1) return all(octets[i + 1] == octets[i] + 1 for i in range(3))
测试示例:
is_strictly_increasing_ip("1.2.3.4")返回Trueis_strictly_increasing_ip("1.2.3.3")返回Falseis_strictly_increasing_ip("252.253.254.255")返回True
正则兼容方案
如果场景强制要求只能用正则匹配,可以自动生成所有符合规则的IP枚举正则,不需要手动手写:
import re # 自动生成匹配规则 increasing_ip_regex = re.compile( "|".join(f"{i}\.{i+1}\.{i+2}\.{i+3}" for i in range(253)) ) # 匹配测试 print(increasing_ip_regex.fullmatch("1.2.3.4") is not None) # True print(increasing_ip_regex.fullmatch("1.2.3.3") is not None) # False
该正则总长度不到4000字符,匹配效率完全满足常规使用需求,仅灵活性弱于逻辑判断方案。
内容的提问来源于stack exchange,提问作者Aspis
相关产品推荐
相关产品推荐

