Вопрос по python, regex – Проверка IP-адреса в Python с использованием регулярных выражений [дубликата]

10

This question already has an answer here:

check if a string matches an IP address pattern in python? 18 answers

В следующей проверке 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'
regex - это дурацкий способ проверить IP-адреса. Вы должны соответствовать числам до 255, но не 256, поэтому регулярное выражение для этого достаточно велико John La Rooy

Ваш Ответ

5   ответов
8
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
Это лучше в моем случае. Спасибо.
13

\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])$";
24

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). Однако регулярные выражения могут быть полезны для обнаружения IP-адресов в большей строке:

ip_candidates = re.findall(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", ip)

Здесь\b привязки границы слова гарантируют, что цифры не превышают 3 для каждого сегмента.

Error: User Rate Limit Exceeded111.111.111.345Error: User Rate Limit Exceeded
31

>>> 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
@ Феникс, да1 эквивалентно0.0.0.1 (так, как это должно быть). Вот почему вы должны предпочесть специализированные библиотечные функции для регулярных выражений хаков.
Здесь только одна вещь. Если вы используете этот подход 1 также подойдет IP-адрес в соответствии с man-страницей.
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

если IP находится в пределах от 0.0.0.0 до 255.255.255.255, то вывод будет истинным, в противном случае он будет ложным:

[0<=int(x)<256 for x in re.split('\.',re.match(r'^\d+\.\d+\.\d+\.\d+$',your_ip).group(0))].count(True)==4

Example:

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

Output:

>>> 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
>>>
да выложил выполненный код. Спасибо за указание.
Вы действительно запускаете этот код, чтобы показать вывод? Я сомневаюсь какyour-ip недопустимое имя переменной Также я вижу, что этот ответ был добавлен в последнее время, но другие ответы гораздо более читабельны.
это опечатка поставила бы '' ' вместо. да, запустил код и получил правильный вывод. дайте мне знать, если что-то не так
Дело было в том, что часть кода была опубликована с опечаткой, которая не может быть выполнена, но вывод выводится. Если вы хотите показать вывод, убедитесь, что вы публикуете тот же код, который выполнялся, а не что-нибудь еще.

Похожие вопросы