/ / ip адрес за проверка в python използвайки regex [дубликат] - python, regex

ip адрес за валидиране в python използване regex [дубликат] - python, regex

В следващите 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
>>>