1.正则表达式
什么是正则? 正则是用一些具有特殊含义的符号组合在一起来描述字符或字符串的方法
为什么用正则?对字符串进行匹配
2.常用匹配模式
# w与W
1 import re 2 #w 匹配一个字母数字下划线 3 print(re.findall('w','hello egon 123')) 4 #W 匹配非字母数字下划线 5 print(re.findall('W','hello egon 123'))
# s与S
1 import re 2 #s 匹配任意空白字符,等价于 (制表符) (换行)f 3 print(re.findall('s','hello egon 123')) 4 #S 匹配任意非空字符 5 print(re.findall('S','hello egon 123'))
# , 与 s
1 import re 2 # 是换行字符 3 #对 的输出需要进行转义 4 #转义 print('\') 5 print(re.findall('a\\c','ac aac')) 6 print(re.findall(r'a\c','ac aac')) 7 # 都是空,都可以被s匹配 8 # 表示制表符 9 print(re.findall('s','hello egon 123'))
# d 与 D
1 import re 2 #d 匹配数字 3 print(re.findall('d','hello egon 123')) 4 #D 匹配非数字 5 print(re.findall('D','hello egon 123'))
# ^ 与 $
1 import re 2 #^ 从开头开始匹配 3 print(re.findall('^h','hello egon 123')) #['h'] 4 #$ 从末尾开始匹配 5 print(re.findall('3$','hello egon 123'))
重复匹配 |.|*|?|.*|.*?|+|{n,m}
1 import re 2 # .代表一个字符,该字符可以是除换行符之外的任意字符 3 # 如果需要匹配换行符则需要加参数 re.DOTALL 4 print(re.findall('a.b','a1b')) 5 #* 代表左边的一个字符出现0次到无穷次 6 print(re.findall('ab*','bbbbbbb')) 7 #? 代表左边的一个字符出现0次到1次 8 print(re.findall('ab?','a')) 9 #+ 代表左边的一个字符出现1次到无穷次 10 print(re.findall('ab+','a')) 11 print(re.findall('ab+','abbb')) 12 #{n,m} 代表左边的一个字符出现n次到者m次 13 print(re.findall('ab{2}','abbb')) 14 print(re.findall('ab{2,4}','abbb')) 15 #[^] 取反 16 #.*默认为贪婪匹配 17 print(re.findall('a.*b','a1b22222222b')) 18 #.*?为非贪婪匹配:推荐使用 19 print(re.findall('a.*?b','a1b22222222b'))
#()分组
View Code
3.re模块的使用
re.DOTALL
re.I 忽略大小写
re.M 以
为分隔符,分隔多行
re.search() 匹配成功之后就结束 不会进行下次查找
re.group()
re.match('','') == re.search('^','')
res = re.compile() 预制正则表达式
调用时候:
print(res.findall())
print(res.search())
print(res.match())
4.hashlib
哈希(hash)是一种算法
该算法接受一系列数据,经过运算会得到一个返回值,这个返回值是hsah值
hash 具备的三大特点:
1.知道传入的内容一样,那么得到的hash值一定是一样的
2.只要采用的hash算法固定,无论传入内容多大,hash值的长度是固定的
3.hash不可逆,不能通过hash值逆推出内容
为什么要用hash?
1和2 可以做文件完整性校验
3加密
import hashlib
m = hashlib.md5()
m.update()传参数
m.hexdigest() 获取hash值