簡體   English   中英

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 八位字節,然后將字符串中的八位字節轉換為 int,然后再轉換回 str。

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

您可以刪除以 . 開頭的零. ^ (行首),后跟除 a 以外的任何內容. 前面有什么( .或行首):

import re

def remove_zeros_from_ip(ip_adr):
  return re.sub('(^|\.)0+(?=[^.])', r'\1', 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'))

Output:

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'\1'

正則表達式演示| Python 演示

例如

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))

Output

10.0.1.10
10.0.2.20

您可以使用:

0*(\d+)

用英語:貪婪地尋找零,直到我們遇到任何其他數字序列。 將數字序列存儲在\1

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM