模块介绍3

day 16

一、正则表达式(re模块)

1、常用的匹配符号

#import re
 \w :匹配字母数字和下划线
# print(re.findall("\w","naj_%^*(%jn"))
# print(re.findall("\w\w","naj_%^*(%jn"))
 \W:匹配除了字母数字和下划线的其他字符
​
 \s:匹配空的字符包含空格 换行符 \t等看不见的
 \S:取反\s
​
 ^: 仅从头开始匹配
# print(re.findall('^alex',' alex is alex is alex'))
​
 $: 仅从尾部开始匹配
# print(re.findall('alex$',' alex is alex is alex1'))
​
 \d:匹配数字
 \D:匹配费数字字符
​
​
#重复匹配
. 匹配除了换行符以外的任意字符
# print(re.findall("a.c","a9c  a*c a\nc"))
# print(re.findall("a.c","a9c  a*c a\nc",re.DOTALL))  #这样就可以匹配包含换行符以外的任意字符了
​
​
[] 表示匹配中括弧内指定的任意一个字符
# print(re.findall("a[0-9]c","a9c a7c"))
# print(re.findall("a[-+*/]c","a-c a^c"))
​
 ?:代表左边的字符重复0次或1次
# print(re.findall("ab?","a ab abb abbb abbbbb"))
# result:['a', 'ab', 'ab', 'ab', 'ab']
 *:代表左边的字符重复0次到无穷次次
# print(re.findall("ab*","a ab abb abbb abbbbb"))
# result:['a', 'ab', 'abb', 'abbb', 'abbbbb']
 +:代表左边的字符重复1次到无穷次
# print(re.findall("ab+","a ab abb abbb abbbbb"))
# result:['ab', 'abb', 'abbb', 'abbbbb']
{n,m}:代表左边的字符重复n次到m次
# print(re.findall("ab{0,}","a ab abb abbb abbbbb")) #不写表示到无穷次 同*
# result:['a', 'ab', 'abb', 'abbb', 'abbbbb']
# print(re.findall("ab{0,1}","a ab abb abbb abbbbb"))  #同?
# print(re.findall("ab{1,}","a ab abb abbb abbbbb"))  #同+
​
​
 .*: 匹配任意0个到无穷个字符,贪婪匹配
# print(re.findall('a.*c','a123213123asdfasdfc123123123123+-0)((c123123'))
​
​
.*?:匹配任意0个到无穷个字符,非贪婪匹配
# print(re.findall('a.*?c','a123213123asdfasdfc123123123123+-0)((c123123'))
​
​
 斜杠\的用法
# print(re.findall("a\\\\c","a\c a9c"))  #两个转意斜杠
# result:['a\\c']    #其中一个斜杠为转意的意思
|:或者   ()分组
# print(re.findall("egon(sb|nb)","egonnb dao lda egonsb "))
# result:['nb', 'sb']
# print(re.findall("egon(?:sb|nb)","egonnb dao lda egonsb "))
# result:['egonnb', 'egonsb']
​
 I 忽略大小写
# print(re.findall("alex","aLex ALEX Alex",re.I))
# ['aLex', 'ALEX', 'Alex']
 M 以换行符为切分标志  进行切分
# msg="""
# baduabha egon
# dbajhajcba egon
# xbhnauhnihbaegon
# """
# print(re.findall("egon$",msg))
# result:['egon']
# print(re.findall("egon$",msg,re.M))
# result:['egon', 'egon', 'egon']
# print(re.findall("egon",msg,re.M))
# result:['egon', 'egon', 'egon']

 

2、re模块下的方法:

# ===========================re模块提供的方法介绍===========================
#import re
1  findall 返回所有满足匹配条件的结果,放在列表里
#print(re.findall('e','alex make love') )   # result:['e', 'e', 'e']
2 search 只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
#print(re.search('e','alex love').group()) # result:e,
3 match 同search,不过在字符串开始处进行匹配,完全可以用search+^代替match
#print(re.match('e','alex make love'))    #result:None,
4 split 先按'a'分割得到'''bcd',再对'''bcd'分别按'b'分割
#print(re.split('[ab]','abcd'))     #result:['', '', 'cd'],
#5
print('===>',re.sub('a','A','alex make love')) #===> Alex mAke love,不指定n,默认替换所有
print('===>',re.sub('a','A','alex make love',1)) #===> Alex make love
print('===>',re.sub('a','A','alex make love',2)) #===> Alex mAke love
print('===>',re.sub('^(\w+)(.*?\s)(\w+)(.*?\s)(\w+)(.*?)$',r'\5\2\3\4\1','alex make love')) #===> love make alex
print('===>',re.subn('a','A','alex make love')) #===> ('Alex mAke love', 2),结果带有总共替换的个数
​
​
#6
obj=re.compile('\d{2}')
​
print(obj.search('abc123eeee').group()) #12
print(obj.findall('abc123eeee')) #['12'],重用了obj

 

二、hashlib模块

1、什么是hash hash是一种算法,该算法接受一系列的数据,经过运算会得到一个hash值, hash值具备三大特性: a、只要传入的内容一样,那么得到的hash值一定是一样

b、只要采用hash算法固定,无论传入的内容多大,hash值的长度是固定

c、hash值不可逆,即不能通过hash值逆推出内容

2、为何要用hash

  特性1+2=>文件完整性校验 

3、hashlib模块的使用

import hashlib
 
m=hashlib.md5()# m=hashlib.sha256()
 
m.update('hello'.encode('utf8'))   #给hashlib传入原材料
print(m.hexdigest())  #5d41402abc4b2a76b9719d911017c592  #根据算法计算出hash值
 
m.update('alvin'.encode('utf8'))
print(m.hexdigest())  #92a7e713c30abbb0319fa07da2a5c4af
 
m2=hashlib.md5()
m2.update('helloalvin'.encode('utf8'))
print(m2.hexdigest()) #92a7e713c30abbb0319fa07da2a5c4af
'''
注意:把一段很长的数据update多次,与一次update这段长数据,得到的结果一样
但是update多次为校验大文件提供了可能。
'''

 

 

posted @ 2018-12-06 17:19  zhao_peng  阅读(154)  评论(0编辑  收藏  举报