day17 正则表达式 re模块和hashlib模块
今日内容
1. re&正则表达式(*****)
注:不要将自定义文件命名为re
import re
re.findall(正则表达式,被匹配的字符串) 拿着正则表达式去字符串中找,返回一个列表
re.findall('alex','hhhhh alex is alex is dsb') # 找出其中所有的alex
以上只表示一种情况,可以用用特殊符号代替多种字符
print(re.findall('\w','Aah123 +-')) # \w表示一次匹配一个字母数字或下划线 ,从头开始匹配完整个字符串
print(re.findall('\w\w','Aah123 +-_')) # 一次匹配两个字符(字母数字下划线),一直匹配到结尾
print(re.findall('\w9\w','Aa9h123 aaa9c+-_'))
\W:匹配非数字字母下划线
print(re.findall('\W','Aah123 +-_'))
\s:匹配任意空白字符
print(re.findall('\s','Aah\t12\n3 +-_'))
\S:匹配任意非空字符
print(re.findall('\S','Aah\t12\n3 +-_'))
\d:匹配任意数字
print(re.findall('\d','Aah\t12\n3 +-_'))
\匹配任意非数字
print(re.findall('\D','Aah\t12\n3 +-_'))
# 按照两个字符数字下滑线+两个数字的正则表达式,去匹配后面的字符串
print(re.findall('\w\w\d\d','asfdasdfegon001adfadfegon002asdfxx01 yy02'))
print(re.findall('\t','Aah\t12\n3 +-_')) # 只在字符串中匹配制表符
print(re.findall('\n','Aah\t12\n3 +-_')) # 只在字符串中匹配换行符
^:仅仅从头开始匹配,只匹配开头,匹配不到就不往后匹配了
print(re.findall('^alex',' alex is alex is alex'))
$:仅从尾部开始匹配,匹配不上就不往前匹配了
.代表一个字符,该字符可以是除换行符之外的任意字符
re.DOTALL 让.匹配所有字符包括换行符
print(re.findall('a.c','a a1c aaac a c asfdsaf a\nc',re.DOTALL))
# a开头,c结尾,中间可以是1-9直接任意的一个数字
print(re.findall('a[0-9]c','a,c a a1c a9c aaac a c asfdsaf a\nc',re.DOTALL))
#a开头c结尾,中间的一个字符可以是a-z或者A-Z之间的任意字符
print(re.findall('a[a-zA-Z]c','a,c aAc a1c a9c aaac a c asfdsaf a\nc',re.DOTALL))
#a开头c结尾,中间可以是+-*/任意一个字符,因为-处在中间时候,有范围的含义,所以放在最后避免歧义
print(re.findall('a[+*/-]c','a,c a+c a-c a*c a/c aAc a1c a9c aaac a c asfdsaf a\nc',re.DOTALL))
#也可以在-号前加上右斜杠\转义
print(re.findall('a[+*\-/]c','a,c a+c a-c a*c a/c aAc a1c a9c aaac a c asfdsaf a\nc',re.DOTALL))
# 在方框[]的范围前加上^,代表取反,a开头,c结尾,中间除了0-9的字符都可以
print(re.findall('a[^0-9]c','a,c a a1c a9c aaac a c asfdsaf a\nc',re.DOTALL))
[]:代表匹配一个字符,但这一个字符可以是莲子与我们自定义的范围
重复匹配
?:代表左边那一个字符出现0次或者1次
print(re.findall('ab?','a ab abb abbbb a123b a123bbb'))
*:代表左边那一个字符出现0次到无穷次
print(re.findall('ab*','a ab abb abbbb a123b a123bbb'))
+:代表左边那一个字符出现1次到无穷次
print(re.findall('ab+','a ab abb abbbb a123b a123bbb'))
{n,m}:代表左边那一个字符出现n次或者m次
print(re.findall('ab{1,3}','a ab abb abbbb a123b a123bbb'))
组合使用
.*:匹配0个到无穷个字符,贪婪匹配,a开头,匹配到最后一个c结束,有害的
print(re.findall('a.*c','a123213123asdfasdfc123123123123+-0)((c123123'))
.*?:匹配任意0个到1次,找到最近的一个匹配字符,非贪婪匹配
print(re.findall('a.*?c','a123213123asdfasdfc123123123123+-0)((c123123'))
|:或者,左边匹配不成功,会匹配右边的
print(re.findall('companies|company','Too many companies have gone bankrupt,c and the next one is my company'))
()匹配成功,只留下括号内匹配成功的部分,加上?:会把
print(re.findall('compan(ies|y)','Too many companies have gone bankrupt,c and the next one is my company'))
(?:a|b)匹配成功后会把整个匹配内容都返回
print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt,c and the next one is my company'))
# 匹配到最近的.就会结束
print(re.findall('href="(.*?)"','<p>动感视频</p><a href="https://www.douniwan.com/1.mp4">逗你玩呢</a><a href="https://www.xxx.com/2.mp4">葫芦娃</a>'))
a\\c,python语法会先转化成a\c,交给c语言的正则表达式功能
print(re.findall('a\\\\c','a\c aac')) # 两个转义符号,转成两个斜杠形式,交给c语言的正则表达式功能
print(re.findall(r'a\\c','a\c aac')) # 也可以在正则表达式前加r,表示原生字符串格式
re.I 忽略匹配时候的大小写
# print(re.findall('alex','my name is alex Alex is dsb aLex ALeX',re.I))
re.M 以换行符\n分割字符串,再一行一行匹配
msg = '''
my name is egon
sadasdasdad egon
123124123123egon'''
print(re.findall('egon$',msg,re.M))
re模块的其他用法
用多个括号可以对匹配的字符串分组,然后选择性的显示
res=re.findall('(href)="(.*?)"','<p>动感视频</p><a href="https://www.douniwan.com/1.mp4">逗你玩呢</a><a href="https://www.xxx.com/2.mp4">葫芦娃</a>')
print(res)
re.search 只匹配一次就结束
print(res.group(0)) # 取出所有分组的内容
print(res.group(1)) # 取出第一个分组的内容
print(res.group(2)) # 取出第二个分组的内容
可以控制()分开的组内元素
re.match 是从头开始匹配的,开头找不到就不往后找了
print(re.findall('alex','alex is alex is alex'))
print(re.search('alex','alex is alex is alex'))
print(re.match('alex','alex is alex is alex'))
# 可以设置好正则表达式的格式,后续直接调用
pattern = re.compile('alex')
print(pattern.findall'alex is alex is alex'))
print(pattern.search('alex is alex is alex'))
print(pattern.match('alex is alex is alex'))
小练习:
msg="1-2*(60+(-40.35/5)-(-40*3))",取出msg中所有的数字
应该是['1', '2', '60', '-40.35', '5', '-4', '3']
print(re.findall('\D?(-?\d+\.?\d*)',msg))
2. hashlib(*****)
1.什么是hash
hash是一种算法,该算法接受一系列的数据,经过运算会得到一个hash值
hash值具备三大特性
1.只要传入的内容一样,那么得到的hash值一定是一样
2.只要采用的hash算法固定,无论传入的内容多大,hash值得长度是固定的
3.hash值不可逆,即不能通过hash值推出内
2.为何要用hash
特性1+2==>文件完整性校验
特性3==>
import hashlib
m = hashlib.md5()
m.update('hello'.encode('utf-8'))
m.update('hello'.encode('utf-8'))
print(m.hexdigest())
m1=hashlib.md5()
m1.update('你好hello'.encode('utf-8'))
print(m1.hexdigest())
print(len(m1.hexdigest())) #32
m2=hashlib.sha512() # 不同的hash算法最后得到的值位数不一样
m2.update(b'asdfassssssssssssssssssssssssssss')
print(m2.hexdigest())
print(len(m2.hexdigest()))
md5 算法的hash值32位
文件过大的时候,如果所有内容都读取的话,hash值会计算过慢
with open(r'D:\脱产5期内容\day17\今日内容',mode='rb') as f:
m=hashlib.md5()
for line in f:
m.update(line)
print(m.hexdigest())
所以可以在文件中节选多段位置,生成hash值,减少生成和校验hash值得时间
pwd=input('password>>> ').strip()
m=hashlib.md5()
m.update('天王盖地虎'.encode('utf-8'))
m.update(pwd.encode('utf-8'))
m.update('一行白鹭上青天'.encode('utf-8'))
print(m.hexdigest())
# 个人密码中可以通过字符串加盐的方式,密码穿插暗号,生成密码,这样会降低撞库的风险
day17 正则表达式 re模块和hashlib模块的更多相关文章
- hmac模块和hashlib模块
hmac模块和hashlib模块 一.hash是什么 hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1.SHA224.SHA256. ...
- 包、logging模块、hashlib模块、openpyxl模块、深浅拷贝
包.logging模块.hashlib模块.openpyxl模块.深浅拷贝 一.包 1.模块与包 模块的三种来源: 1.内置的 2.第三方的 3.自定义的 模块的四种表现形式: 1.py文件 2.共享 ...
- [xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块]
[xml模块.hashlib模块.subprocess模块.os与sys模块.configparser模块] xml模块 XML:全称 可扩展标记语言,为了能够在不同的平台间继续数据的交换,使交换的数 ...
- re模块、hashlib模块
一.re模块 1.什么是正则? 正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串,正则就是用来去一个大的字符串中匹配出符合规则的子字符串 2.为何要用正则? 用户注册 ...
- python 之 re模块、hashlib模块
6.16 re模块 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 ...
- 模块讲解---time模块,datetime模块,random模块,hashlib模块和hmac模块,typing模块,requests模块,re模块
目录 1. 包 2. time模块 1. 优先掌握 2. 了解 3. datetime模块 1. 优先掌握 4. random模块 1. 优先掌握 2. 了解 5. hashlib模块 ...
- Python模块之hashlib模块、logging模块
一.hashlib模块 hashlib模块介绍:hashlib这个模块提供了摘要算法,例如 MD5.hsa1 摘要算法又称为哈希算法,它是通过一个函数,把任意长度的数据转换为一个长度固定的数据串,这个 ...
- 19 python初学(os 模块,sys 模块,hashlib 模块)
os 模块: # _author: lily # _date: 2019/1/13 import os print(os.getcwd()) # 得到当前的工作目录 # print(os.chdir( ...
- day5模块学习--hashlib模块
hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...
- 模块讲解----hashlib模块(加密)
作用 用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 语法 import hashlib #md5 ...
随机推荐
- ROS进阶学习手记 7.2 -- RViz仿真实例2:Create SmartCar
上一节玩了 exbot 在RViz里的仿真控制,这里我们用urdf文件写个自己的小车模型,ref: http://blog.csdn.net/hcx25909/article/details/8904 ...
- linux base shell 基础语法
转载 本文主要是基础的基础,希望对大家有所帮助 一.Shell基本类型的变量: (1)Shell定义的环境变量: Shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,用户还可以重新定义这 ...
- ssh 第一次登录输入yes 问题
#!/bin/bash for i in hadoop01 hadoop02 hadoop03 hadoop04 hadoop05 hadoop06 hadoop07 hadoop08 hadoop0 ...
- tomcat中项目后有括号
引入他人项目时,由于报错,copy本地workspace下其他项目的 .settings和.project到该项目路径下 结果Eclipse 的 Server 中出现了 aaa(bbb)的情况 并且 ...
- Flex 画图
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="h ...
- CSS3 过渡动画
实现如下效果:当鼠标移动到图片上是图片有类似于放大镜放大的效果 transition : CSS属性 时间 当transition中监测的css属性发生变化时,会触发动画 .img_box img{ ...
- visio交叉线不凸起
使用visio作图时,经常会遇到交叉线在相交时会形成一个弯曲弓形,这有时十分影响视图效果.可以采用下面的方法消除弓形. 1.visio2003:只需要选中该交叉线,选择“格式”->“行为”,在打 ...
- (转载)Android下Affinities和Task
源文链接:http://appmem.com/archives/405 1.Activity和Task task就好像是能包含很多activity的栈. 默认情况下,一个activity启动另外一个a ...
- mysql字符串处理
MySQL字符串操作: substring(column_name, "start_position"); # 从指定的位置(第二个参数, start_position)开始,取到 ...
- VS2017断点调试UNITY2018.3 经常卡住的问题
发现了VS下断点经常导致unity卡住的原因,是vs占用CPU太高导致的,这其中又是vs service hub 造成的,这个除了在代码中提示各函数引用之外好像没什么用,我定位到它的安装目录,删除了配 ...