Python正则多匹配实现:提取指定层级下的函数IP地址
解决正则提取指定层级IP及多匹配测试工具问题
一、提取指定层级下testAmplitude函数的独立IP
要精准提取目标层级下函数内的独立IP,需要分三步锁定范围再提取:
- 锁定指定层级的Class块:先匹配
Test1→Test1_1→Test1_1_1的嵌套Class结构,避免跨层级匹配无关内容 - 定位testAmplitude函数:在目标Class块内找到对应函数的内容
- 提取所有独立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
相关产品推荐
相关产品推荐

