我对这段代码遇到了很多麻烦:
command = "!ip"
string = "!ip 127.0.0.1"
if command in string:
我被卡住的地方。在第一个if语句之后,我需要另一个来识别任何IP地址而不是127.0.0.1。最简单的方法是什么?
答案 0 :(得分:2)
我会使用正则表达式给出一个镜头,其中正则表达式(?:[0-9]{1,3}\.){3}[0-9]{1,3}
是IP地址的简单匹配。
ip = '127.0.0.1'
match = re.search(r'(?:[0-9]{1,3}\.){3}[0-9]{1,3}', ip)
# Or if you want to match it on it's own line.
# match = re.search(r'^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$', ip)
if match:
print "IP Address: %s" %(match.group)
else:
print "No IP Address"
正则表达式可以让您在进行数据匹配时更轻松。
答案 1 :(得分:1)
尝试从中创建一个ipaddress。如果失败,则不是IP地址。这意味着您必须能够删除"!ip"字符串的一部分,无论如何这可能是很好的做法。如果这不可能,你可以拆分空格并取出ipaddress部分。
import ipaddress
try:
ipaddress.ip_address(string)
return True
except ValueError as e:
return False
答案 2 :(得分:1)
不确定您的输入是什么样的,但如果您不需要搜索地址(意味着您知道它应该在哪里),您可以将该字符串传递给这样的字符串。
def is_ipaddress(s):
try:
return all(0 <= int(o) <= 255 for o in s.split('.', 3))
except ValueError:
pass
return False
然后
string = "!ip 127.0.0.1"
command, param = string.split()
if command == '!ip':
if not is_ipaddress(param):
print '!ip command expects an ip address and ', param, 'is not an ip address'
else:
print 'perform command !ip on address', param