如何使用Regex匹配key:value格式文件中的多行IP地址
匹配多行IP地址的正则方案
针对你描述的key:value格式文件,其中IP Address:字段后可能跟着多行独立的IP地址,这里提供两种正则方案:
基础匹配方案(快速简洁)
适合不需要严格验证IP合法性的场景:
IP Address:\s*(?:\n?\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))+
严格匹配方案(验证IP合法性)
会过滤掉256.0.0.1这类不符合IPv4规范的地址:
IP Address:\s*(?:\n?\s*((?: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?)))+
正则结构解释
IP Address::精准匹配字段的固定键名\s*:匹配键名后可能存在的空格、制表符等空白字符(?:\n?\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))+:重复匹配多行IP的非捕获组\n?\s*:匹配换行符及IP行前可能的空白缩进(...):捕获组,提取单个IP地址+:允许匹配一个或多个连续的IP行
示例代码(Python)
import re # 模拟文件内容 file_content = """key1: value1 IP Address: 192.168.1.1 10.0.0.1 key2: value2""" # 使用严格匹配正则 pattern = r"IP Address:\s*(?:\n?\s*((?: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?)))+" ip_list = re.findall(pattern, file_content) print("提取到的IP地址:", ip_list) # 输出:提取到的IP地址: ['192.168.1.1', '10.0.0.1']
注意事项
- 若使用命令行工具(如grep),需开启跨行匹配支持:例如
grep -Pz "IP Address:\s*(?:\n?\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))+" your_file.txt - 正则会自动匹配IP行前的缩进空白,无需额外调整规则
内容的提问来源于stack exchange,提问作者Sachin Kadam
相关产品推荐
相关产品推荐

