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