Day17re模块和hashlib模块

re模块
正则表达式
用一些特殊符号拼凑成的规则,去字符串中匹配到符合规则的东西

为什么有正则表达式
从字符串中取出想要的数据

怎么用正则表达式
re.findall()结果存成列表
w 匹配一个字符,字符,数字,下划线
W 匹配一个字符,非字符,数字,下划线
s 匹配一个字符,空白字符
S 匹配一个字符,非空白字符
d 匹配一个字符,数字
D 匹配一个字符,非数字
^从头开始匹配
$从尾开始匹配

重复匹配
点(.),匹配一个字符,可以是任意非 字符, re.DOTALL(flags)
[],匹配一个字符,当需要匹配"-"时
方法1,-放到最左或最右
方法2,-前加转义
[]放在[]内,表示取反

? 代表左边那一个字符出现0次到1次
* 代表左边出现0次到无穷次
+ 代表左边字符出现1次到无穷次
{m,n} 代表左边出现m次,不超过n次

.贪婪匹配(尽可能多的匹配字符)
.
?非贪婪匹配(尽可能少的匹配字符)

|或者,两选1
() 分组,默认情况下只留下匹配成功组内的东西
(?:)匹配成功全部都拿到

print(re.findall("alex","my name is alex,aLex is dsb ALex",re.I))
re.I忽略大小写

msg = """
my name is egon
adadfafdadfa egon
fdafadfdafegon
"""

print(re.findall("egon$",msg,re.M))
以 为分隔符,分成三行,各自匹配

pattern = re.compile("alex")
pattern.findall(msg)

hashlib
hash是一种算法,高效解决某一类问题的方法
1.接收一系列数据,经过运算,得到一个返回值,该返回值叫hash值
hash值特点
1.只要传入内容一样得到的hash值一样
2.只要采用hsah算法固定,无论传入的内容多大,hash值的长度是固定的
3.hash值不可逆,不可通过hash值逆推出内容

为何要用hash
用途:1.文件完整性校验(特性1和2)
2.加密
m = hashlib.md5()
m.update()接收的数据必须是bytes类型
m.update("你好".encode("utf8"))
m.update("hello".encode("utf8"))
m.update(b"hello")
print(m.hexdigest())

文件截取内容:
with open("a.txt","rb")as f:
for line in f:
m.update(line)
res = m.hexdigest()
文件过大需要全部读取出来加密,影响我们的下载速度,故截取部分类容加密

密码加盐:
m = hashlib.md5()
pwd = input("input your pwd:").strip()
m.update("天王盖地虎")
m.update(pwd)
m.update("宝塔镇河妖")
res = m.hexdigest()

原文地址:https://www.cnblogs.com/robert-zhou/p/10080085.html