在帮朋友解决这个问题后,随便记录一下这三种方法:
第一种方法:使用正则表达式:
因为当时的要求是判定10.0.0.1 到 10.255.255.255,原理其实是一样。这里简单回顾一下正则表达式模式的内容:
            常见的如:
            
             \d 可以表示0~9的任意一个数字字符而\D是匹配一个非数字字符等价于^ ^是匹配字符串的开头,但放在[]中表示匹配不在[]中的字符
            
             $是匹配字符串的末尾
            
             .是匹配除了换行符任意字符
            
             {}表示重复几次,例如:^a{2,4} $ aa,aaa或aaaa
            
             | 的是或的意思
            
             []表示匹配括号里面的给出内容像[aeiou]则匹配中括号内的任意一个字母,注意一个中括号只对应一个位置,例如[Pp]ython是匹配 “Python” 或 “python”,而rub[ye]则匹配 “ruby” 或 “rube”。同理[a-z]是匹配任何小写字母,复杂一点的如^ [a-zA-Z_] $是匹配所有的字母和下划线。
            
             \是转义字符,更方便使用在字符串前面加r表示原生字符串解决反斜杠困扰
          
            然后收集了一些可能使用的:
            
             数字:^ [0-9]* $
            
             n位的数字:^ \d{n} $
            
             汉字:^ [ \u4e00-\u9fa5]{0,}$
            
             英文和数字:^ [A-Za-z0-9]+$ 或 ^ [A-Za-z0-9]{4,40}$
            
             Email地址:^\w+([-+.]\w+)
            
              @\w+([-.]\w+)
            
            .\w+([-.]\w+)*$
            
             域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
            
             IP地址:((?: (?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d)) 或 ^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9]).(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d).(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d).(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$
            
             其中:
            
             1\d{2}的意思就是100~199之间的任意一个数字
            
             2[0-4]\d的意思是200~249之间的任意一个数字
            
             25[0-5]的意思是250~255之间的任意一个数字
            
             [1-9]\d的意思是10~99之间的任意一个数字
            
             [1-9])的意思是1~9之间的任意一个数字
          
            
              import re
def check_ip(ipAddr):
    compile_ip = re.compile('^(10)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)')
    if compile_ip.match(ipAddr):
        return True
    else:
        return False
            
          
          第二种方法:字符串拆解
            主要是采用Python中的split()方法通过指定分隔符对字符串进行切片,如果参数num有指定值,则分隔 num+1 个子字符串
            
             split()方法语法:str.split(str="", num=string.count(str)).
            
             str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
            
             num – 分割次数。默认为 -1, 即分隔所有。
            
             返回值是返回分割后的字符串列表。
          
            
              #!/usr/bin/python
import sys
def check_ip(ipAddr):
    addr = ipAddr.strip().split('.')
    for i in range(4):
        try:
            addr[i] = int(addr[i])
        except:
            print("check ip address failed!")
            sys.exit()
        if 255 >= addr[i] >= 0:
            pass
        else:
            print("check ip address failed!")
            sys.exit()
        i += 1
    else:
        print("check ip address success!")
            
          
          第三种方法:使用IPy库
一个专门处理IP的第三方库,需要自行安装:
            
              import IPy 
def check_ip(ipAddr): 
  try: 
    IPy.IP(address) 
    return True
  except Exception as e: 
    return False
            
          
          总结:
总的来说初学者使用字符串拆解比较简单,也容易理解。正则表达式功能强大但是相对复杂在写的时候很容易犯错,所以在爬虫中使用相对较少了,最后的直接使用第三方库算是比较方便的方式。


 
					 
					