5

试图弄清楚为什么我无法将 IP 的输出与设置的 IP 匹配并因此呈现结果。

import urllib
import re

ip = '212.125.222.196'

url = "http://checkip.dyndns.org"

print url

request = urllib.urlopen(url).read()

theIP = re.findall(r"\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}", request)

print "your IP Address is: ",  theIP

if theIP == '211.125.122.192':
    print "You are OK"
else:
    print "BAAD"

结果总是“BAAD”

4

4 回答 4

6

re.findall返回匹配列表,而不是字符串。所以你现在有两个选择,要么遍历列表并使用any

theIP = re.findall(r"\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}", request)
if any(ip == '211.125.122.192' for ip in theIP):
    print "You are OK"
else:
    print "BAAD"  

#or simply:

if '211.125.122.192' in theIp:
    print "You are OK"
else:
    print "BAAD"  

或使用re.search

theIP = re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}", request)
if theIP and (theIP.group() == '211.125.122.192'):
    print "You are OK"
else:
    print "BAAD"  
于 2013-11-06T15:39:39.643 回答
0

re.findAll返回一个列表,而不是一个字符串!

你必须抓住字符串:

theIP = re.findall(r"\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}", request)[0]

或者,只需检查ip搜索结果中是否包含 :

if ip in theIP:
    print "You are OK"

或使用re.search

theIP = re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}", request)
于 2013-11-06T15:42:35.420 回答
0

theIP 不是一个字符串,它是一个列表。请参阅文档

>>> print re.findall.__doc__
Return a list of all non-overlapping matches in the string.

    If one or more groups are present in the pattern, return a
    list of groups; this will be a list of tuples if the pattern
    has more than one group.

    Empty matches are included in the result.

你可能想做类似的事情

for ip in theIP:
    if ip == '211.125.122.192':
        print 'You are ok :)'

但是,获取 ip 的方法可能比访问网页并解析结果要好得多。也许你可以使用hostname -Isubprocess?也许这样的事情会更好?

import subprocess

theIP = subprocess.check_output(['hostname','-I'])
于 2013-11-06T15:47:22.230 回答
0

这是因为您将列表与字符串进行比较。可能的解决方案(取决于你想要什么):

if any(ip == '211.125.122.192' for ip in theIP):

-> 检查是否有任何找到的 IP 地址匹配

或者

if theIP and theIP[0] == '211.125.122.192':

-> 检查列表是否不为空以及第一次找到的 IP 地址是否匹配。

如果结果总是只包含一个 IP 地址,那么re.findall您可以使用 just来代替hcwhsare.search的建议。

于 2013-11-06T15:40:19.857 回答