匹配ip地址html
参考 http://blog.chinaunix.net/uid-108431-id-3350731.html正则表达式
http://blog.csdn.net/liangyuannao/article/details/8755325api
第一步:地址分析,正则初判 网络
第三步:进一步合并函数
能够进一步合并为:测试
r = r'((([1-9]?|1\d)\d|2([0-4]\d|5[0-5]))\.){3}(([1-9]?|1\d)\d|2([0-4]\d|5[0-5]))'ui
通过测试发现ip地址带有别的字符串过滤会有问题url
经改后为spa
r='((?:(?:(?:[1-9]?|1\d)\d|2(?:[0-4]\d|5[0-5]))\.){3}(?:[2-9]|(?:[1-9]|1\d)\d|2(?:[0-4]\d|5[0-4])))\D'.net
re.findall(r,s)
注意:
内建函数,
abs()取绝对值 max()min()
divmod(x,y) 返回求模后的商和余数 callable(函数)判断函数是否可被调用
isinstance(x,y)判断类型
str.capitalize() 字符串首字母大写
str.replace() 字符串替换 这个是具体替换,模糊替换查看sub()
string.replace(s,old,new)须要导入string模块
filter(函数,序列)函数做用于序列,可用于序列过滤
正则表达
r1 = r"\d{3,4}-?"
编译正则表达为对象
re_tel=re.compile(r1)
这样就能够当作对象进行调用re的方法
re_tel.findall('字符串')返回列表
匹配不区分大小写
re_tel=re.compile(r1,re.I)re.I 调用re的属性表示不区分大小写
match()匹配的对象是否在字符串的开始位置,返回一个对象,通常能够把返回值给一个变量,看这个变量是否为none,
search() 匹配字符串不管在任何位置,也是返回对象
finditer() 匹配后返回一个对象可迭代器,能够经过next()方法查看,其返回也是一个对象,若果想看到其值,就能够掉用方法group()
相似于group()的方法还有
start() 返回匹配开始的的位置
end 返回匹配结束的位置
span 返回一个元祖,包含(开始,结束)
sub是截取字符串,可是支持多个分隔符
sub(正则,'替换对象',原始字符串) 这个是模糊替换
re.split(正则,字符串)支持多个分隔符,且支持正则表达
r1=r"[\+\-\*]"
re.split(r1,s)以+,_,*,三个字符串做为分隔符
正则表达里面常常用到的属性
re.S 使 . 匹配包含换行在内的全部字符 re.findall(r1,字符串,re.S)
re.I 使匹配不区分大小写
re.M 多行匹配,影响^ 和$,同时多行的匹配,若是正则表达式是多行的话,也要加这个属性
re.X可以使用REs的verbose状态是指被组织的更清晰易懂
正则表达式分组
email = r "\w{3}@\w+(\.com|\.cn)"
re.match(email,'zzz@sun.com') 匹配到了会返回一个对象
re.findall(email,zzz@sun.com) 返回的是匹配到的分组字符串[.com]
若是咱们有一个字符串s=''' sdf hello sun=westos t43
wefs sun=no t43 sdf
hello sun=ni t43 sddsf'''
r1=r"hello sun=.+ t43"
re.findall(r1,s) 返回的匹配到的全部数据 ['hello sun=westos t43','hello sun=ni t43']
若是咱们作分组处理
r1=r"hello sun=(.+) t43"
re.findall(r1,s) 返回的优先是分组中的数据,就是匹配到分组的数据 ['westos','ni']
match也能够匹配
这个能够用到网络的爬虫,获取咱们想获取的url或者ip