在帮朋友解决这个问题后,随便记录一下这三种方法:

第一种方法:使用正则表达式:

因为当时的要求是判定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):
            addr[i] = int(addr[i])
        except:
            print("check ip address failed!")
            sys.exit()
        if 255 >= addr[i] >= 0:
        else:
            print("check ip address failed!")
            sys.exit()
        i += 1
    else:
        print("check ip address success!")

第三种方法:使用IPy库

一个专门处理IP的第三方库,需要自行安装:

import IPy 
def check_ip(ipAddr): 
    IPy.IP(address) 
    return True
  except Exception as e: 
    return False

总的来说初学者使用字符串拆解比较简单,也容易理解。正则表达式功能强大但是相对复杂在写的时候很容易犯错,所以在爬虫中使用相对较少了,最后的直接使用第三方库算是比较方便的方式。

判定域名后缀是否是合法注册域名 在做有关流量中域名聚类的事情,需要进行数据过滤。做实验过程中的小探索,如何利用PSL(public suffix list)判断域名后缀是否合法,即是注册域名。 发现有两个python的包,用两个包做出来效果完全相同,即在同一数据集滤除相同的不合法域名 from publicsuffix import PublicSuffixList import code... 1 背景爱奇艺SRC团队会对启用https的域名进行监控,检查包括:使用的协议版本、加密套件是否存在漏洞、证书是否过期等。Apple对使用https进行连接有更加严格的要求,叫做App Transport Security(简称ATS)。不符合ATS规范的,不能进行HTTPS链接,目前,ATS规范当前还没有强制实施。调研之后,我们使用python3实现了检测代码,便于日后ATS强制实施时,对业务部... 题目中先给出一个整型数n(1 ≤ n ≤ 50),表示后面有n行字符串需要判断。随后的n行中,每行一个字符串,需要进行合法性判断。对于合法的字符串,应输出“Y”,否则输出“N”,结果中间不用空格。第一行是正整数数n。从第2行到第n+1行,每行一个字符串,需要判断其合法性。由“Y”和“N”组成的一行数据,分别表示第n个数据是合法还是非法。请编程判断给定的字符串是否是形式上合法的域名。一个合法的域名是形如“ 网址名包括字母,数字,下划线,横杠(-), 点号(.) 和 加号(+); 后面紧跟着 .和顶级域名, eg: .com, .info, .edu, .US等 请使用正则表达式实现该函数。 import re def check_web_address(text): pattern = r'[\w|.|-|+]+\.(com|info|edu|US|org)$' result = 先整理下正则表达式的规则,以下内容大部分来自廖雪峰的python教程。 \d表示一个数字,\w表示一个数字或者一个字母,.表示任意一个字符,*表示任意个字符(包括0个),+表示至少一个字符,?表示0个或者1个字符,{n}表示n个字符,{n,m}表示n至m个字符。 [0-9a-zA-Z\_]匹配一个数字或者一个字母或者下划线,[0-9a-zA-Z\_]+匹配至少一个由一个数字或者一个字母或者下划 作为一名程序猿,不能只够用php和html写程序,这次就用“人生苦短,我用python”的python程序写域名检测功能。在没接触过python之前没觉得有多好用,现在真香系列,是我格局小了。 提取搜索结果的URL 百度搜索结果的url,按F12到consale端,复制粘贴下面代码,回车。 var tag=document.getElementsByClassName('r'); for (var i=0;i<tag.length;i++){ var a=tag[i].getEl 《C++模板元编程》第十章开头这样写道,“如果语法糖没有什么价值的话,那我们大家都用汇编语言编程了“。如果说Python是大道至简的语法糖,那么正则表达式就是甜到爆的语法糖。正则表达式究竟何德何能,能有这么甜?那你就不妨跟我瞧一瞧喽!我的标题都蛮有意思,很多都不忘记3分钟XXX。比如”3分钟入门“,”3分钟搞定“等等。3分钟热度呗。也许你根本不需要3分钟,或者更多,不过这都无所谓喽。简单介绍一下正... 生活中我们肯定会见到很多域名(domain name,简称domain)。域名有很多形式,以句点(.)作为分隔符。这里说的域名是纯域名,不是网址,不包括http://(或https://),也不带斜线。 常见的域名形式 1. 由两个部分组成,例如baidu.com(百度),csdn.net(CSDN),wikipedia.org(维基百科)。 2. 由多个部分组成... python练习——判断IP地址合法性 互联网上的每台计算机都有一个独一无二的编号,称为IP地址,每个合法的IP地址由’.'分隔开的4个数字组成,每个数字的取值范围是0-255。 现在用户输入一个字符串 s (不含空白符,不含前导0,如001直接输入1),请你判断 s 是否为合法IP,若是,输出’Yes’,否则输出’No’。 如用户输入为202.114.88.10, 则输出Yes; 当用户输入202.114.88,则输出No。 输入输出格式 输入:一个字符串 输出:‘No’或’Yes’