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

如何从逗号分隔的单个字段中动态提取多个IPv4地址?

提取JSON格式字段中多个IPv4地址的正则方案

问题场景

需要从类似如下的字符串中提取badips字段下的所有IPv4地址,最终以空格分隔输出:

"badips":["123.456.789.12","123.456.789.13","123.456.789.14"]

期望输出:
123.456.789.12 123.456.789.13 123.456.789.14

此前尝试的正则要么只能提取第一个IP,要么会包含引号和逗号,需要能动态匹配至少1个IP的方案。

解决方案

方案一:精准匹配badips字段并提取

使用以下正则捕获badips数组内的内容,再替换掉分隔符:

"badips":\["(?P<badips>(?:\d+\.\d+\.\d+\.\d+)(?:","\d+\.\d+\.\d+\.\d+)*)"\]
  • 正则解析:
    • "badips":\[:精准定位badips数组的起始前缀
    • (?P<badips>...):命名捕获组,用于提取数组内的所有IP内容
    • (?:\d+\.\d+\.\d+\.\d+):匹配单个IPv4地址(非捕获组,仅用于重复匹配逻辑)
    • (?:","\d+\.\d+\.\d+\.\d+)*:匹配后续的","IP组合,*支持0次或多次重复,保证至少能匹配1个IP
    • "\]:匹配数组的结束部分

捕获内容后,将其中的","替换为空格即可得到目标格式。

示例代码(Python):

import re
target_str = '"badips":["123.456.789.12","123.456.789.13","123.456.789.14"]'
pattern = r'"badips":\["(?P<badips>(?:\d+\.\d+\.\d+\.\d+)(?:","\d+\.\d+\.\d+\.\d+)*)"\]'
match_result = re.search(pattern, target_str)
if match_result:
    clean_ips = match_result.group('badips').replace('","', ' ')
    print(clean_ips)  # 输出:123.456.789.12 123.456.789.13 123.456.789.14

方案二:全局匹配所有IPv4地址(更简单)

如果字符串中没有其他无关的IPv4地址,可以直接用全局匹配提取所有符合格式的IP,再用空格拼接:

\d+\.\d+\.\d+\.\d+

示例代码(Python):

import re
target_str = '"badips":["123.456.789.12","123.456.789.13","123.456.789.14"]'
ip_list = re.findall(r'\d+\.\d+\.\d+\.\d+', target_str)
print(' '.join(ip_list))  # 输出:123.456.789.12 123.456.789.13 123.456.789.14

进阶补充

  • 若需要严格符合IPv4规范(每个段取值0-255),可使用更严谨的IP匹配正则:
    (?: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?)
    
  • 如果处理的是标准JSON数据,优先用JSON解析库(比如Python的json模块),比正则更可靠:
    import json
    target_str = '{"badips":["123.456.789.12","123.456.789.13","123.456.789.14"]}'
    data = json.loads(target_str)
    print(' '.join(data['badips']))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:34:36