В следващите IP адрес за потвърждение искам да видя дали е валиден IP адрес или не, как мога да направя това, използвайки по-долу
>>> ip="241.1.1.112343434"
>>> aa=re.match(r"d{1,3}.d{1,3}.d{1,3}.d{1,3}[^0-9]",ip)
>>> aa.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: "NoneType" object has no attribute "group"
Отговори:
19 за отговор № 1Използвайте вместо това котви:
aa=re.match(r"^d{1,3}.d{1,3}.d{1,3}.d{1,3}$",ip)
Те се уверяват, че началото и края на низа са съчетани в началото и в края на регрекса. (добре, технически, не е необходимо стартиране ^
котва, защото се подразбира в .match()
метод).
След това проверете дали тестът действително съвпада, преди да опитате да достигнете до резултатите му:
if aa:
ip = aa.group()
Разбира се, това не е добър подход за валидиране на IP адреси (вижте отговора на gnibbler за правилния метод), но regexes могат да бъдат полезни за откриване на IP адреси в по-голям низ:
ip_candidates = re.findall(r"bd{1,3}.d{1,3}.d{1,3}.d{1,3}b", ip)
Тук, b
Ключовете за граница на думи гарантират, че цифрите не надвишават 3 за всеки сегмент.
26 за отговор № 2
Защо не използвате библиотечна функция за валидиране на IP адреса?
>>> ip="241.1.1.112343434"
>>> socket.inet_aton(ip)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.error: illegal IP address string passed to inet_aton
11 за отговор № 3
d{1,3}
ще съответства на числа като 00
или 333
както и не би било валиден идентификатор.
Това е отличен отговор от smink, цитирайки:
ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
7 за отговор № 4
try:
parts = ip.split(".")
return len(parts) == 4 and all(0 <= int(part) < 256 for part in parts)
except ValueError:
return False # one of the "parts" not convertible to integer
except (AttributeError, TypeError):
return False # `ip` isn"t even a string
0 за отговор № 5
Следното ще провери дали IP е валиден или не: Ако IP е в рамките на 0.0.0.0 до 255.255.255.255, тогава изходът ще бъде истина, в противен случай ще бъде false:
[0<=int(x)<256 for x in re.split(".",re.match(r"^d+.d+.d+.d+$",your_ip).group(0))].count(True)==4
Пример:
your_ip = "10.10.10.10"
[0<=int(x)<256 for x in re.split(".",re.match(r"^d+.d+.d+.d+$",your_ip).group(0))].count(True)==4
изход:
>>> your_ip = "10.10.10.10"
>>> [0<=int(x)<256 for x in re.split(".",re.match(r"^d+.d+.d+.d+$",your_ip).group(0))].count(True)==4
True
>>> your_ip = "10.10.10.256"
>>> [0<=int(x)<256 for x in re.split(".",re.match(r"^d+.d+.d+.d+$",your_ip).group(0))].count(True)==4
False
>>>