Python - 从 IP 地址中删除前导零

Python - remove leading zeros from IP addresses

我正在尝试从 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

您可以拆分IP八位字节,然后将string中的Octets转换为int,然后再返回str。

>>> ip='10.00.01.10'
>>> '.'.join([str(int(x)) for x in ip.split('.')])
'10.0.1.10'

您可以删除以 .^(行首)开头且后跟除 . 之外的任何零以及前面的内容(. 或行首):

import re

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

测试:

print(remove_zeros_from_ip('10.0.01.10'))

print(remove_zeros_from_ip('10.00.002.20'))

print(remove_zeros_from_ip('0010.00.02.0020'))

输出:

10.0.1.10
10.0.2.20
10.0.2.20

非正则表达式的解决方案是用 . 拆分字符串并使用 str.rstrip 删除前导零,然后使用 str.join 重建字符串:

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

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

\b0+(\d+)

替换为

r''

Regex demo | Python demo

例如

import re

def remove_zeros_from_ip(ip_add):
  string = re.sub(r'\b0+(\d+)', r'', 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

您可以使用:

0*(\d+)

英语:贪婪地寻找零,直到我们遇到任何其他数字序列。将数字序列存储在

https://regex101.com/r/sEdwMK/1