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

正则表达式匹配IP地址范围中的第二个有效IP地址

解决方案

你的问题出在两个核心问题上:

  • 原正则的正向断言(?<=\-\s))存在语法错误(多了一个右括号),且仅能匹配-后跟单个空格的场景,无法覆盖-前后无空格、多个空格的情况;
  • 没有验证IP地址的有效性,只是简单匹配数字段,会导致捕获到1.0.0.2456这类无效IP。

正确的正则实现方案

我们先定义有效IP地址的正则片段,再匹配-前后任意数量的空格,最终精准捕获第二个有效IP:

import re

test = '''
1.0.0.0-1.0.0.240
2.0.0.0 - 1.0.0.241
3.0.0.0 -1.0.0.242
4.0.0.0- 1.0.0.243
5.0.0.0  -  1.0.0.244
6.0.0.0 -  1.0.0.245
7.0.0.0 -  1.0.0.2456 #NOT VALID SO DONT MATCH
'''

# 定义匹配0-255合法数字段的正则
valid_ip_segment = r'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
# 拼接成完整的有效IP正则
valid_ip = rf'{valid_ip_segment}\.{valid_ip_segment}\.{valid_ip_segment}\.{valid_ip_segment}'

# 匹配每行中,-前后任意空格后的有效IP
pattern = rf'^.*?\s*-\s*({valid_ip})$'
r = re.compile(pattern, re.MULTILINE)
matches = r.findall(test)

print(matches)
# 输出结果: ['1.0.0.240', '1.0.0.241', '1.0.0.242', '1.0.0.243', '1.0.0.244', '1.0.0.245']

代码说明

  1. 有效IP校验:valid_ip_segment确保每个IP段是0-255之间的合法数值,直接过滤掉超出范围的无效段;
  2. 多行模式适配:re.MULTILINE让^和$分别匹配每行的开头和结尾,保证只处理单行内的IP范围;
  3. 分隔符兼容:\s*-\s*匹配-前后任意数量的空格(包括0个),覆盖所有可能的分隔写法;
  4. 精准捕获:通过括号捕获第二个符合规则的有效IP,无效IP所在的行会因不满足valid_ip规则被自动过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:05:15