【发布时间】:2011-07-24 14:19:10
【问题描述】:
如何在 python 中检查变量是否包含 DNS 名称或 IP 地址?
【问题讨论】:
-
这么多骗子,但没有人关闭它。 :D
-
@N1.1 因为它们不是完全重复的。这个问题的答案不是正则表达式。这个问题也不是一般地询问模式匹配,而是询问特定的模式匹配。
如何在 python 中检查变量是否包含 DNS 名称或 IP 地址?
【问题讨论】:
这会起作用。
import socket
host = "localhost"
if socket.gethostbyname(host) == host:
print "It's an IP"
else:
print "It's a host name"
【讨论】:
您可以使用Python的re模块来检查变量的内容是否为ip地址。
IP地址示例:
import re
my_ip = "192.168.1.1"
is_valid = re.match("^(([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])$", my_ip)
if is_valid:
print "%s is a valid ip address" % my_ip
主机名示例:
import re
my_hostname = "testhostname"
is_valid = re.match("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", my_hostname)
if is_valid:
print "%s is a valid hostname" % my_hostname
【讨论】:
我会查看这个 SO 问题的答案:
Regular expression to match DNS hostname or IP Address?
重点是将这两个正则表达式和 OR 组合在一起以获得所需的结果。
【讨论】:
print 'ip' if s.split('.')[-1].isdigit() else 'domain name'
这并不能验证其中任何一个是否格式正确。
【讨论】: