Python - удалить ведущие нули с IP-адресов - PullRequest
3 голосов
/ 19 сентября 2019

Я пытаюсь удалить начальные нули с 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

Ответы [ 4 ]

4 голосов
/ 19 сентября 2019

Вы можете разделить октеты IP и затем преобразовать октеты в строке в int, а затем обратно в строку.

>>> ip='10.00.01.10'
>>> '.'.join([str(int(x)) for x in ip.split('.')])
'10.0.1.10'
0 голосов
/ 19 сентября 2019

Вы можете использовать:

0*(\d+)

На английском языке: жадно находите нули, пока мы не встретим любую другую последовательность цифр.Сохраните последовательность цифр в \1

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

0 голосов
/ 19 сентября 2019

Если единственными данными являются 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
0 голосов
/ 19 сентября 2019

Вы можете удалить нули, перед которыми стоит . или ^ (начало строки), за которыми следует что-либо, кроме ., с предшествующим ему (. или началом строки):

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('.'))
...