2019-03-21-day016-正则表达式
昨日内容回顾
- 基本数据类型
- 编码
- 流程控制
- 文件操作
- 函数-内置函数
- 装饰器
常用模块:
- 序列化模块
- 随机数模块
- os模块
- sys模块
- 时间模块
- hashlib
- collections
- re 1天半
- logging 日志
- 自定义模块 1天
- 模块和包
- 异常处理
学习时间
面向对象 6天
网络编程 5天
并发编程 5天
数据库 5天
前端
django 基础
框架
内容回顾
常用模块
时间模块
time
time是datetime的底层模块
时间戳时间-localtime/gmtime-> 结构化时间 -strftime-> 格式化时间
时间戳时间<-mktime- 结构化时间 <-
strptime- 格式化时间
datetime
时间对象
计算时间差\时间的时分秒
import datetime
t = datetime.datetime.now() # 时间操作符
print(t.date())
print(t.time())
print(t.timestamp())
print(t.day)
print(t.month)
collections
# 可命名元组 namedtuple
# 双端队列 deque
# 默认字典 defaultdict
from collections import Iterable,Iterator
print(isinstance(open('a','w'),Iterable))
print(isinstance(open('a','w'),Iterator))
from collections import defaultdict
def func():
return 5
dic = defaultdict(func)
print(dic['a'])
双端队列 和 列表的区别
- 效率 底层的数据结构上
- 双端队列 从中间插入或者删除比较频繁的时候
- 如果只是单纯的append和pop再加上查询比较多 这个时候就用列表
正则表达式
- 场景一 :检测某一段字符串是否符合规则
- 从某一段文字中找到符合规则的内容
规则-待检测一段字符串
元字符
| 元字符 | 含义 |
|---|---|
| . | 匹配换行符之外的所有字符 |
| [0-9] \d | 匹配任意一个数字 digit |
| \w | [A-Z0-9a-z_] |
| \n | 匹配回车换行 |
| \t | 匹配制表符 table |
| 空格 | 本身匹配 空格 |
| \s | 匹配所有的空白 |
| \b | 匹配一个单词的边界 |
| \W | 除了数字字母下划线之外的所有 |
| \D | 除了数字之外的所有 |
| \S | 除了空白之外的所有 |
| [] | 述的是一个字符位置上的内容规则 |
| [0-5] | [012345] |
| 字母 | [A-Z0-9a-z] |
| 数字 | [0-9] |
| 小写 | [a-z] |
| 大写 | [A-Z] |
| 大小写 | [A-Za-z] |
| 数字和大小写字母加下划线 | [A-Z0-9a-z_] |
| \\ | \ |
| 匹配所有 | [\D\d] [\W\w] [\S\s] |
| 非字符组 | [123]除了123之外的都匹配 |
注意事项:
- [9-0] 不能从大到小来规定范围
- 字符组内所有的范围都是根据ascii码来的
- 在字符组当中 -是有特殊意义的,如果我们想取消这个横杠的特殊意义需要使用\作为转义符
开始符和结束符
| 元字符 | 含义 |
|---|---|
| ^ | 永远在一个规则的最开始 |
| $ | 永远在一个规则的最末尾 |
| ^和$ | 规定了这个字符串的长度,并且在这个长度内的内容 |
| | | 或的概念123|456 |
分组的概念
www\.(baidu|oldboy)\.com
总结
\d \w \s \n \t \D \W \S \b
[],[^]
^ $
| 或 永远把相对长的规则放在左侧
()
.
量词
在量词的范围内尽可能多的匹配
- {n} 表示出现n次
- {n,} 表示至少出现n次
- {n,m} 表示出现n-m次
- ? 表示匹配0次或1次
- + 表示匹配1次或多次
- * 表示匹配0次或多次
元字符 量词
- 匹配的是一个字符的内容
- 量词 表示的是匹配的次数
#匹配整数
[1-9]\d*|0
#匹配小数
\d+\.\d+
#匹配一个整数或者小数
\d+\.\d+|([1-9]\d*|0)
\d+\.?\d*
\d+(\.\d+)?
在量词范围内尽可能多的匹配 - 贪婪匹配
正则表达式 匹配身份证号码
15位
- 15位
- 首位不能为0
- ^[1-9]\d{14}$
18位
- 18位
- 首位不能为0,末尾可能是x和数字
- ^[1-9]\d{16}[\dx]$
合起来
- ^([1-9]\d{16}[\dx]|[1-9]\d{14})$
- [1-9]\d{14}(\d{2}[\dx])?
转义
- 在测试的网页上写的是什么
- 就直接复制过来
- 然后在字符串外面加上一个r
r'\\n' --> r'\n'
t 't'
| 元字符 | 含义 |
|---|---|
| \t | \本身具有转义作用,相当于改变了t本来的面目 |
| \ | \本身具有转义作用,\相当于转义了\的特殊作用,相当于普通的一个'\' |
贪婪匹配 :默认的 尽可能多匹配
惰性匹配 :需要我们手动设置的 尽可能少匹配
- a.* 以a开头的任意一个字符串都可以被匹配出来
- a.*? 非贪婪
- a.*?x 从a开始匹配,匹配任意长度的字符,遇到一个x就立即停止
总结
正则表达式本身和 python没有半毛钱关系
正则表达式 :
- 检测字符串是否符合规则
- 从一大段文字中找到符合规则的
元字符
- 包括的
量词
- 包括的
转义符
- \n 换行
- \n \n
- r'\n' r'\n'
惰性特点 元字符量词?x
贪婪匹配 元字符量词
作业
- hashlib模块 写函数 校验两个文件是否内容相同如果这两个文件很大
- hashlib做一个密文存储密码的注册 登录程序
- 拼手气发红包 函数
- os模块 计算文件夹的总大小
- 这个文件夹里都是文件
- 这个文件夹里还有文件夹
- 计算当前月的1号的时间戳时间
2019-03-21-day016-正则表达式的更多相关文章
- [2019.03.21]LF, CR, CRLF and LFCR(?)
开玩笑的啦,没有LFCR这种沙雕东西 为什么突然想起来写这个呢,是因为先前照着shell画llehs的时候,总报错,改正了以后又因为看不见而在上一篇博客上没有写明,所以过来好好写一写咯. 可以看出报错 ...
- 2019.03.21 admin
1.新建文件创建一个应用类 stu Python manage.py startapp stu 2,创建应用类 记得在setting中的installed_apps中添加应用 student/mode ...
- 2019.03.21 读书笔记 ==与Equals
首先得出一个结论:==是比较变量内存的数据,Equals是值比较.但是他们都能被重写,所以object又增加了一个RefrenceEquals不可被重写,只比较数据: [ReliabilityCont ...
- 2019.03.21 读书笔记 枚举ENUM
其实没必要为枚举显式赋值,如果赋值了,就一定要全部赋值,否则默认在上一个元素的基础上+1,如果不给枚举变量赋值,就算枚举中没有0元素,也会显示为0,而超出枚举范围的整型数据,也会显示值本身,而不是异常 ...
- 2019.03.21 读书笔记 readonly与const
区别: const是编译时常量(指反编译时看到的源码是常量本身,而不是变量),自带static,只能修饰基元类型.枚举.字符串,readonly是运行时常量(全局变量或者构造赋值),不受类型限制,但在 ...
- 2019.03.21 读书笔记 基元类型的Parse与TryParse 性能与建议
Parse转换失败时会抛出异常,耗损性能,如果转换成功,则与TryParse无差异.查看源码,tryparse的代码更多一些,在失败时,反而性能更优,主要是抛出异常耗损了性能.所以在不确定是用Tryp ...
- [2019.03.25]Linux中的查找
TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...
- http://www.cnblogs.com/wzh206/archive/2010/03/21/1691112.html
http://www.cnblogs.com/wzh206/archive/2010/03/21/1691112.html
- 2019.03.03 - Linux搭建go语言交叉环境
编译GO 1.6版本以上的需要依赖GO 1.4版本的二进制,并且需要把GOROOT_BOOTSTRAP的路径设置为1.4版本GO的根目录,这样它的bin目录就可以直接使用到1.4版本的GO 搭建go语 ...
- 2019.3.18考试&2019.3.19考试&2019.3.21考试
2019.3.18 C O D E T1 树上直接贪心,环上for一遍贪心 哇说的简单,码了将近一下午终于码出来了 感觉自己码力/写题策略太糟糕了,先是搞了一个细节太多的写法最后不得不弃疗了,然后第二 ...
随机推荐
- 精华 selenium_webdriver(python)调用js脚本
#coding=utf-8 from selenium import webdriver import time driver = webdriver.Firefox() driver.get(&qu ...
- HDU-6336-构造
Problem E. Matrix from Arrays Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 ...
- mybatis的update使用选择
更新后台设置时,会分多个页面更新同一个表中的数据,愿想是尽量减少sql请求数据量并且减少重复代码. 比如博客园的: 假如只有一个用户信息表,这样的话每个页面只更新部分字段. 这种情况下的更新推荐在xm ...
- Maven依赖标红线,非jar包冲突问题
Maven依赖标红线 在pom中引入依赖fastdfs-client时,该依赖可以正常引入,但是查看Maven Project时,该依赖下总是有几个依赖报红线,并不是依赖冲突,测试代码无法正常运行.想 ...
- Jmeter4.0----录制脚本
1.前言 Jmeter录制脚本有两种方式.1.通过第三方工具录制比如:Badboy,然后转化为jmeter可用的脚本:2.使用jmeter本身自带的录制脚本功能. 对于测试小白来说可用先使用jmete ...
- 一、Redis的学习
一.Redis的简介 Redis是一个高性能的key-value数据库,有点像一个hashmap. Redis与其他非关系型数据库做缓存有下面几个特点: 1.Redis支持数据的持久化,可以将内存中的 ...
- Struts 2 初步入门(二)
Struts 2 动态方法调用 1.在HelloWorldAction中添加两个新的方法如下: import com.opensymphony.xwork2.ActionSupport; public ...
- 使用ES6的reduce函数,根据key去重
最近很着迷于ES6的函数,让代码变得更优雅.ES6里的reduce函数,平时用的不是特别多,真正用起来发现还是挺好用的. 想要实现的效果为: 原数组: let rawArr = [{id:'123'} ...
- CSS3 的box-shadow进阶之 - 基础知识篇
box-shadow被认为是CSS3最好的特性之一,发挥想象力,搭配其它属性,可以做出很多好看的效果(如下图,将会放在下一篇文章讲解),这篇文章主要讲一下box-shadow的基础知识. ...
- javaweb环境搭建
首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网 ...