我需要一個正則運算式將匹配以下模式a.b.c.d /nn,例如192.168.0.24 /32。
同時我想做一些驗證,以便在八位位元組中第一個數字只能是 1 或 2,如果最后 3 個八位位元組僅包含 1 個數字,則它也可以是 0。另外八位位元組的個數應該最多255個。 類似/nn的方式,第一個數字應該只有1到3,如果是3,第二個應該是0到2,如果第一個是缺席,那么唯一的數字應該是從 1 到 9。
我可以寫這樣的模式
(?<!\d)(?!0|4|5|6|7|8|9)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} /(?<!\d)(?!0|4|5|6|7|8|9)\d{1,2}
但例如也192.168.740.056 /39匹配它。
uj5u.com熱心網友回復:
使用正則運算式來驗證 IP 地址是一個壞主意 - 這將通過 999.999.999.999 作為有效。嘗試使用套接字代替這種方法 - 更好的驗證并且同樣簡單,如果不是更容易的話。
import socket
def valid_ip(address):
try:
socket.inet_aton(address)
return True
except:
return False
print(valid_ip('10.10.20.30'))
print(valid_ip('999.10.20.30'))
print(valid_ip('gibberish'))
uj5u.com熱心網友回復:
這對你有用嗎?
def find_ips(ip_string):
for match in re.finditer(r'(?P<ip>[12]\d*\.\d \.\d \.\d )\s /(?P<mask>\d )', ip_string):
octets = list(map(int, match.group('ip').split('.')))
if all(0 <= octet <= 255 for octet in octets) and int(match.group('mask')) <= 32 and octets[-1] > 0:
yield match.group()
# ips = ['192.168.0.1 /32', '22.22.22.22 /32']
ips = list(find_ips("ip1=8.8.8.8 /32; ip2=192.168.0.1 /32; ip3=22.22.22.22 /32; ip4=192.168.740.056 /39"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401803.html
上一篇:Tensorflow影像分類得到train_images/train_X和train_labels/train_y
下一篇:保存前如何最好地驗證反向關系總數
