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

Python正则多匹配实现:提取指定层级下的函数IP地址

解决正则提取指定层级IP及多匹配测试工具问题

一、提取指定层级下testAmplitude函数的独立IP

要精准提取目标层级下函数内的独立IP,需要分三步锁定范围再提取:

  1. 锁定指定层级的Class块:先匹配Test1→Test1_1→Test1_1_1的嵌套Class结构,避免跨层级匹配无关内容
  2. 定位testAmplitude函数:在目标Class块内找到对应函数的内容
  3. 提取所有独立IP:从函数内容中抓取符合格式的IP地址

示例代码如下:

import re

# 示例层级文本
target_text = """
<Class name="Test1">
    <Class name="Test1_1">
        <Class name="Test1_1_1">
            <Function name="testAmplitude">
                Server IP: 192.168.1.100
                Backup IP: 10.20.30.40
            </Function>
            <Function name="testPing">
                IP: 172.16.0.1
            </Function>
        </Class>
    </Class>
</Class>
"""

# 1. 匹配指定层级的Class内容
level_regex = r'<Class name="Test1">.*?<Class name="Test1_1">.*?<Class name="Test1_1_1">(.*?)</Class>.*?</Class>.*?</Class>'
level_match = re.search(level_regex, target_text, re.DOTALL)

if level_match:
    class_content = level_match.group(1)
    # 2. 定位testAmplitude函数内容
    func_regex = r'<Function name="testAmplitude">(.*?)</Function>'
    func_match = re.search(func_regex, class_content, re.DOTALL)
    
    if func_match:
        func_text = func_match.group(1)
        # 3. 提取所有独立IP
        ip_regex = r'\b(?:\d{1,3}\.){3}\d{1,3}\b'
        ip_list = re.findall(ip_regex, func_text)
        print("提取到的IP:", ip_list)
        # 输出:提取到的IP: ['192.168.1.100', '10.20.30.40']

关键说明:

  • 用re.DOTALL让正则的.匹配换行符,适配多行文本结构
  • 先用层级正则缩小范围,避免匹配其他层级的同名函数
  • 最后用re.findall()而非re.search(),一次性抓取所有符合格式的IP

二、支持多匹配的正则测试工具

  • regex101:默认就支持多匹配,在右侧「Match Information」面板切换到「List」视图,就能看到所有匹配结果,还能查看每个分组的具体内容
  • regexr:右侧「Matches」标签下会列出所有匹配项,点击可查看单条匹配的详情
  • 本地Python环境:直接写测试代码用re.findall()或re.finditer(),能直接模拟实际使用场景,调试更精准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:12:15