21 re正则模块 垃圾回收机制
垃圾回收机制
不能被程序访问到的数据,就称之为垃圾
1)引用计数
引用计数:用来记录值的内存地址被记录的次数的;当一个值的引用计数为0时,该值就会被系统的垃圾回收机制回收
每一次对值地址的引用都可以使该值的引用计数 +1
每一次对值地址的释放都可以使该值的引用计数 -1
2)循环导入
循环导入会导致某些值得引用计数永远大于0 => 内存泄漏
ls1 = [666]
ls2 = [888] ls1.append(ls2) # >>>[666, [888, [...]]] ls2.append(ls1) # >>>[888, [666, [...]]]
3)标记删除
标记:遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),
然后将所有可以直接或间接访问到的GC Roots对象标记为存活的对象,存放到新的内存空间中
删除:遍历堆中所有的对象,将之前所有的内容全部清除
4)分代回收
分代:指的是根据存活时间来为变量划分不同等级(也就是不同的代)
回收:依然是使用引用计数作为回收的依据
1、新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么该对象的权重(本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,
2、青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,接下来,青春代中的对象,也会以同样的方式被移动到老年代中。
3、也就是等级(代)越高,被垃圾回收机制扫描的频率越低
正则
带语法的字符串,用来匹配目标字符串得到想要的字符串结果
|
# 语法:
# 1.单个字符
# \d == [0-9]
# \D == [^0-9]
# \w == 字母+数字+_
# [0-9A-Za-z] == 所有字母+数字
# . == 匹配所有单个字符(刨除换行) # 2.多个字符
# zo* == zo{0,}
# zo+ == zo{1,}
# zo? == zo{0,1} # 应用
# 匹配多个zo:zozozozo
# (?:zo){1,} # 3.多行
# ^: 以什么开头 $: 以什么结尾 结合 flags=re.M 可以按\n来完成多行匹配
# re.S:将\n也能被.匹配 re.I:不区分大小写 re.M:结合^ $来使用,完成多行匹配
# 4.分组 # 1.从左往右数数 ( 进行编号,自己的分组从1开始,group(0)代表匹配到的目标整体
# 2.(?: ... ):取消所属分组,()就是普通(),可以将里面的信息作为整体包裹,但不产生分组 import re
regexp = re.compile('(?:(?:http://)(.+)/)') # 生成正则对象
target = regexp.match('http://www.baidu.com/')
print(target.group(1)) # www.baidu.com # 5.拆分
print(re.split('\s', '123 456\n789\t000')) # 6.替换
# 1.不参与匹配的原样带下 2.参与匹配的都会被替换为指定字符串
# 3.在指定字符串值\num拿到具体分组 4.其他字符串信息都是原样字符串
print(re.sub('《(?:[a-z]+)(\d+)(.{2})', r'\\2abc\2\1', '《abc123你好》'))
首先介绍的是re模块的findall方法,该方法用于从字符串中获取所有匹配成功的内容:
import re
res = re.findall("表达式","字符串内容")
res = re.findall("\w","hello python")
res = re.findall("^http://","http://www.baidu.com\nhttp://www.sina.com.cn", re.M)
# 该方法得到一个列表
print(res)
# 单个字符匹配 \w \W \s \S \d \D . \r \n \t
单个字符匹配
# 指定匹配范围 a|b|c [abc] [^abc] [a-z] [a-zA-Z0-9] 注意当 -需要作为普通字符时必须写在最前面或最后面
指定匹配范围
# 匹配次数
{a}
{b,}
{a,b}
\*
?
匹配次数
# 位置匹配 ^ $ \d \B
位置匹配
# 贪婪模式 默认情况下+和*将尽可能多的匹配内容 \+ * # 非贪婪模式 将尽可能少的匹配内容,当?出现在其他的重复次数后面时会将贪婪模式改为非贪婪模式。 ? 如 abc.*? abc.+?
贪婪模式 | 非贪婪模式
# 分组 用于单独获取某一部分匹配的内容 (表达式)获取匹配的 (?:表达式) 不获取匹配的 补充: #匹配模式:.不能匹配换行符
content='''Hello 123456 World_This
is a Regex Demo
'''
# res=re.match('He.*?(\d+).*?Demo$',content)
# print(res) #输出None # res=re.match('He.*?(\d+).*?Demo$',content,re.S) #re.S让.可以匹配换行符
# print(res)
# print(res.group(1))
分组
# re模块其他函数 search 仅获取第一个匹配的内容 match 从字符串开始处开始匹配 compile 得到一个的表达式对象,后期可以重复使用 split 使用正则表达式来切分字符串 ```python
re.split("[:\/\\]","a:b/c\d/f")
``` sub 普通替换与字符串的替换没有区别 print(re.sub("python","PYTHON","python asasasaasa python")) 正则替换 只替换后面的python print(re.sub("(python)(.*)(python)",r"\1\2PYTHON","python asasasaasa python")) # 练习 - 编写验证身份证的正则
- 编写验证手机号的正则
- 编写验证邮箱地址的正则
re模块其他函数
21 re正则模块 垃圾回收机制的更多相关文章
- RE模块垃圾回收机制
今日内容 一.垃圾回收机制 函义:不能被程序访问到的数据,就称之为垃圾 1.引用计数 引用计数是用来记录值的内存地址被记录的次数的 每一次对值地址的引用都可以使该值的引用计数 +1 每一次对值地址的 ...
- (IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
参考博客: https://www.cnblogs.com/xiao987334176/p/9056511.html 内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yi ...
- python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...
- [CLR via C#]21. 自动内存管理(垃圾回收机制)
目录 理解垃圾回收平台的基本工作原理 垃圾回收算法 垃圾回收与调试 使用终结操作来释放本地资源 对托管资源使用终结操作 是什么导致Finalize方法被调用 终结操作揭秘 Dispose模式:强制对象 ...
- DAY20、垃圾回收机制,正则模块
一.垃圾回收机制1.不能被程序访问到的数据,就称之为垃圾2.引用计数:每一次对值地址的引用都可以使该值得引用计数加1 每一次对值地址的释放都可以使该值得引用计数减一 当一个值的引用计数为0时,该值就会 ...
- 【Python】 垃圾回收机制和gc模块
垃圾回收机制和gc模块 Py的一个大好处,就是灵活的变量声明和动态变量类型.虽然这使得学习py起来非常方便快捷,但是同时也带来了py在性能上的一些不足.其中相关内存比较主要的一点就是py不会对已经销毁 ...
- day 21 垃圾回收机制、标记删除及分代回收
垃圾回收机制 # 不能被程序访问到的数据,就称之为垃圾 引用计数 # 引用计数是用来记录值的内存地址被记录的次数的# 每一次对值地址的引用都可以使该值的引用计数 +1# 每一次对值地址的释放都可以使 ...
- day21 二十一、垃圾回收机制、re正则
一.内存管理 1.垃圾回收机制:不能被程序访问到的数据称之为垃圾 2.引用计数:引用计数是用来记录值的内存地址被记录的次数 每一次对值地址的引用都可以使该值的引用计数 +1 每一次对值地址的释放都可以 ...
- Python垃圾回收机制:gc模块
在Python中,为了解决内存泄露问题,采用了对象引用计数,并基于引用计数实现自动垃圾回收. 由于Python 有了自动垃圾回收功能,就造成了不少初学者误认为不必再受内存泄漏的骚扰了.但如果仔细查看一 ...
随机推荐
- bugku crypto 告诉你一个秘密(ISCCCTF)
emmmm....有点坑 题目: 636A56355279427363446C4A49454A7154534230526D6843 56445A31614342354E326C4B4946467A57 ...
- 百度地图失去坐标html
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- springboot全局捕获异常
捕获 捕获原理,使用AOP技术,采用异常通知. 1.捕获返回json格式 2.捕获返回页面 步骤: 1.@ControllerAdvice(pasePackage="") 注释异常 ...
- 微信小程序之初探(常见语法 VS vue)常见问题(点击不生效,数据绑定)
最近在调研微信小程序开发,对于一个前端小白来说,在各种框架都还用不熟的情况下,再来开发小程序确实还是不容易. 小程序出来之初,听过演讲,看过一点点儿视频,感觉和angular语法有点相似(PS:那是也 ...
- Apache Flink教程----安装初体验
1.window 版本安装 https://flink.apache.org/downloads.html#apache-flink-164 D:\flink-1.6.2-bin-scala_2\fl ...
- python json相关问题
关于字典和字符转化问题. 1.使用eval()(一般不推荐) eval is evil. 这种方法可能直接执行恶意代码. 2.使用json.loads()(极度推荐) 这种方法是推荐的,但是要注意细节 ...
- Modbus通讯数据格式:
RTU&&TCP单个写入 RTU&&TCP多个写入 RTU&&TCP数据读取 ASCII码数据格式 Modbus功能码: 功能码 名称 作用 1 读取线 ...
- python之路(9)反射、包装类、动态模块导入
目录 反射 利用继承二次包装标准类 利用授权二次包装标准类 动态模块导入 反射 python提供自省的四个方法: hasattr(object,name) 判断object中有没有有个name字符串 ...
- 实验一 Java开发环境的熟悉(Linux + Idea) 20175301李锦然
https://gitee.com/ShengHuoZaiDaXue/20175301.git 实验一 Java开发环境的熟悉(Linux + Idea) 实验内容 1.使用JDK编译.运行简单的Ja ...
- Docker实践之01-入门介绍
目录 一.Docker概述 镜像 容器 仓库 二.安装Docker 1.在CentOS上安装Docker 2.在Ubuntu上安装Docker 3.启动docker 4.建立Docker用户组 5.测 ...