【python】使用正则在不规则字符串中提取出多个ip地址

ipv4地址总长度为32位,共4段,每段8位,以‘.’分割,每段为0~255的十进制数字

一、ip地址正则表达式

分段正则:

取值区间 正则 合并整理
0-9 \d
10-99 \d{2} [1-9]?\d
100-199 1\d{2} 1\d{2}
200-249 2[0-4]\d 2[0-4]\d
250-255 25[0-5] 25[0-5]

合并整理:

# 每一段的正则:
(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)

# 完整ip的正则:
r'((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)'
二、提取ip

示例字符串:

str = "123.12.12.12q we1764.12.12.76asd12.12.23.287frg45.23.278.34hrdf127.0.0.1jj255.45.45.45bghtbh43.0.76.345"
# 以上能够构成ip地址的有 ['127.0.0.1', '255.45.45.45', '123.12.12.12']
ip地址提取中可能出现的错误
  • 第一段或第四段位数超出,在匹配时直接舍去
  • 十进制数大于255,超出ip范围,在匹配时舍去第一位或最后一位而去两位使数字保持在范围内
  • findall匹配中间部分时需要将捕获组转化为非捕获组
ip地址提取思路

在从字符串中提取ip时可以将其分为开头,中间和结尾三部分:

  1. 中间部分
    判断可能符合ip地址格式的字符串部分的前后均需要至少一位非数字字符来截取。
    ip地址部分前三位只匹配数字长度为1~3位,第四段则使用ip地址的正则表达式进行匹配,避免出现第四段为大于255以上的数字时,在最终提取ip时舍去最后一位而匹配成功的情况。
    最后将分组加上非捕获符号后,使用findall匹配出中间所有符合ip地址格式的字符串,返回ip地址列表,正则表达式如下:
	r'\D(?:\d{1,3}\.){3}(?:25[0-5]|2[0-
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值