1127正则表达式与内存管理
-
内存管理:内存分为栈区间和堆区间,栈区间的内存是系统自动申请释放;堆上的内存需要程序通过调用malloc函数去申请,通过调用free函数去释放;
高级语言(java、C++、0C、Python)中内存管理机制,都是针对堆上的内存的管理进行自动化操作
-
Python内存管理机制:
1)内存申请:Python中所有数据都是存于堆中;变量与函数调用过程压栈存于栈中,变量中保存堆中数据的地址;如果使用数字和字符串给变量赋值,会先检查内存是否有这个数据,如果有会直接将原来的数据地址赋予变量;除了字符串和数字以外,别的数据重新赋值会赋予新的地址
2)内存释放(垃圾回收机制):在Python中,一个数据对应的内存空间是否释放,取决于这个数据的引用计数是否为0,如果为0就会被释放
a. 增加引用计数:增加数据的引用
b. 减少引用计数:删除引用,或者让引用去保存新的数据
c. 循环引用:Python垃圾回收机制会自动处理循环引用问题
-
拷贝:
1)浅拷贝copy:复制原数据,外层拷贝,返回一个新地址,内层可变数据类型不会拷贝
2)深拷贝deepcopy:浅拷贝基础上,递归拷贝,内层可变数据类型也会拷贝获得新地址
-
正则表达式:re模块;主要解决生活中字符串匹配问题
1)用正则符号来描述字符串规则,使字符串匹配更简单的一种工具;几乎所有的编程语言都支持正则
2)正则符号之匹配符号:
a. 普通字符:在正则表达式中没有特殊意义的字符
b. ‘.’:代表一个任意字符
c. ‘\d’:匹配任意一个数字字符,‘\D’:与小写相反
d. ‘\s’:匹配任意一个空白字符,‘\S’:与小写相反
e. [字符集]:匹配字符集中的任意一个字符,一个[]只能匹配一个字符
f. [字符1-字符2]:匹配任意一个字符1到字符2之间的字符
g. [ ^字符集]:匹配除了字符集以外的任意一个字符
3)正则符号之检测符号:只检查不匹配
a. ‘\b’:检测是否是单词边界
b. ‘^‘:检测字符开头
c. ’$‘:检测字符串结尾
4)匹配次数:
a. ’?‘:匹配0次或1次
b. '*':匹配任意次数
c. ’+‘:匹配1次或多次
d. {N}:匹配N次
e. {M,N}:匹配M到N次
f. {M,}:匹配至少M次
g. {,N}:匹配最多N次
5)贪婪与非贪婪:匹配次数不确定时有贪婪和非贪婪两种状态
a. 默认是贪婪:在匹配成功的前提下,尽可能多的匹配
b. 非贪婪:在贪婪符号后添加’?‘,在匹配成功的前提下,尽可能少的匹配
6)分支和分组:
a. 分支|:正则1|正则2,|相当于或的意思,先让正则1匹配,只有一个匹配成功就成功
b. 分组():把()当成一个整体,例如:(正则表达式)匹配次数-- 整体控制次数
c. 重复:()字符\n,表示重复n次()内的内容