Python识别字符串中的IP

时间:2014-03-28 21:17:04

标签: python string python-2.7 ip

我对这段代码遇到了很多麻烦:

    command = "!ip"
    string = "!ip 127.0.0.1"

    if command in string:

我被卡住的地方。在第一个if语句之后,我需要另一个来识别任何IP地址而不是127.0.0.1。最简单的方法是什么?

3 个答案:

答案 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