在Python中使用正则表达式验证IP地址
我正在尝试验证IP地址。下面是代码。有人能告诉我代码中有什么错误吗在Python中使用正则表达式验证IP地址,python,regex,Python,Regex,我正在尝试验证IP地址。下面是代码。有人能告诉我代码中有什么错误吗 import re ip = '355.4' m = re.match('^((?:1?\d{0,2}|2[0-4]\d{1}|25[0-5]).){3}(?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])$', ip) if m: print "correct" print m.groups() else: print "wrong" 根据给定的IP,它应该打印错误的,但打印正确的(
import re
ip = '355.4'
m = re.match('^((?:1?\d{0,2}|2[0-4]\d{1}|25[0-5]).){3}(?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])$', ip)
if m:
print "correct"
print m.groups()
else:
print "wrong"
根据给定的IP,它应该打印
错误的,但打印正确的('4',)
作为输出。我犯了一个错误,没有在
之前给出\
,这导致它匹配任何字符
import re
ip = '255.25.2.256'
m = re.match('^((?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])\.){3}(?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])$', ip)
if m:
print "correct"
print m.groups()
else:
print "wrong"
len(ip.split(“.”)==4和all(map)(lambda o:o.isdigit()和int(o)如果允许不使用regex
,可以使用python的套接字包。inet_aton(“string”)
将字符串转换为ip
地址,如果这是无效的ip,它将抛出异常
我尝试过的一个简单例子:
import socket
def check_valid(address):
try:
socket.inet_aton(address)
return address.count('.') == 3
except socket.error:
return False
if __name__ == "__main__":
print check_valid("192.168.1.255")
它将检查所有有效的ip地址,如192.168.1.257
无效,而192.168.1.255
有效。您应该删除:1?
中的可选量词?
。
否则,…
是一个有效的ip地址。可能很有趣:如果您需要调试正则表达式的帮助,我已经将其放入了。它可能对现在或将来有帮助!我不会说“从不”,但肯定不是为了这样的问题。+1为什么我不应该使用正则表达式?因为它们不可读。它是只写的东西。在编辑器或shell中使用它们可以一次使用(例如,我每天要做几十次),但不是在代码中。你也不应该重复你自己,你正在分裂两次,只是为了把它全部放在一行。@iced,关键是,不是所有的东西都可以或应该是一行代码。而且正则表达式在代码中也有它的用途,所以说永远不要使用它是完全错误的
import socket
def check_valid(address):
try:
socket.inet_aton(address)
return address.count('.') == 3
except socket.error:
return False
if __name__ == "__main__":
print check_valid("192.168.1.255")