社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python-从ip地址中删除前导零

Arif • 5 年前 • 1358 次点击  

我试图从IP地址中删除前导零,但它不起作用

import re

def remove_zeros_from_ip(ip_add):
  string = re.sub('(?!(\.0\.))(\.[0]{1,2})', '.', ip_add)  
  return string

ip = '10.0.01.10'
print(remove_zeros_from_ip(ip))

ip1 = '10.00.002.20'
print(remove_zeros_from_ip(ip1))

但是得到这个-

10.0.1.10
10..2.20

如何获得?-

10.0.1.10
10.0.2.20
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43170
 
1358 次点击  
文章 [ 3 ]  |  最新文章 5 年前
The fourth bird
Reply   •   1 楼
The fourth bird    5 年前

如果唯一的数据是IP,则可以使用字边界 \b ,匹配1+零并使用捕获组匹配1+个数字,并在替换中使用该组。

\b0+(\d+)

替换为

r'\1'

Regex demo γ Python demo

例如

import re

def remove_zeros_from_ip(ip_add):
  string = re.sub(r'\b0+(\d+)', r'\1', ip_add)  
  return string

ip = '10.0.01.10'
print(remove_zeros_from_ip(ip))

ip1 = '10.00.002.20'
print(remove_zeros_from_ip(ip1))

产量

10.0.1.10
10.0.2.20
brokenfoot
Reply   •   2 楼
brokenfoot    5 年前

可以拆分IP八位字节,然后将字符串中的八位字节转换为int,然后再转换回str。

>>> ip='10.00.01.10'
>>> '.'.join([str(int(x)) for x in ip.split('.')])
'10.0.1.10'
MrGeek
Reply   •   3 楼
MrGeek    5 年前

您可以删除前面带有 . ^ (线的起点)后面跟着除 . 在它之前( . 或开始行):

import re

def remove_zeros_from_ip(ip_add):
  return re.sub('(^|\.)0+(?=[^.])', r'\1', ip_add)

测试:

ip = '10.0.01.10'
print(remove_zeros_from_ip(ip))

ip1 = '10.00.002.20'
print(remove_zeros_from_ip(ip1))

ip2 = '0010.00.02.0020'
print(remove_zeros_from_ip(ip2))

输出:

10.0.1.10
10.0.2.20
10.0.2.20

非正则表达式解决方案是将字符串拆分为 . 使用 str.rstrip 若要删除前导零,请使用 str.join 要重建字符串:

def remove_zeros_from_ip(ip_add): 
  return '.'.join(p.lstrip('0') or '0' for p in ip_add.split('.'))