3 回答

TA貢獻1895條經(jīng)驗 獲得超3個贊
看起來您正在嘗試驗證IP地址。正則表達式可能不是最好的工具。
如果您想接受所有有效的IP地址(包括您可能甚至不知道的某些地址都有效),那么您可以使用IPy (源):
from IPy import IP
IP('127.0.0.1')
如果IP地址無效,則會引發(fā)異常。
或者你可以使用socket (來源):
import socket
try:
socket.inet_aton(addr)
# legal
except socket.error:
# Not legal
如果你真的只想將IPv4與4個小數(shù)部分匹配,那么你可以在dot上進行拆分并測試每個部分是0到255之間的整數(shù)。
def validate_ip(s):
a = s.split('.')
if len(a) != 4:
return False
for x in a:
if not x.isdigit():
return False
i = int(x)
if i < 0 or i > 255:
return False
return True
請注意,您的正則表達式不會執(zhí)行此額外檢查。它將接受999.999.999.999作為有效地址。

TA貢獻1802條經(jīng)驗 獲得超10個贊
我通常是極少數(shù)堅持捍衛(wèi)正則表達式的Python專家之一(他們在Python社區(qū)中聲名狼借),但這不是其中之一 - 接受(比方說)'333.444.555.666'作為“IP地址”是真的太差了,如果你需要的RE匹配后做更多的檢查,多使用稀土的一點是無論如何丟失。所以,我衷心地第二個@Mark的建議:IPy的普遍性和優(yōu)雅(如果你想要支持IPv6?。?,字符串操作和int檢查,如果你只需要IPv4(但是,請考慮一下這個限制,然后再想一想 - - IPv6的的時間的方式來- )!
def isgoodipv4(s):
pieces = s.split('.')
if len(pieces) != 4: return False
try: return all(0<=int(p)<256 for p in pieces)
except ValueError: return False
我寧愿這樣做而不是一個復雜的RE來匹配0到255之間的數(shù)字! - )
添加回答
舉報