zoukankan      html  css  js  c++  java
  • re模块

    垃圾回收机制

    引用计数:是用来记录值在内存地址被记录的次数
    
    每一次对值地址的引用都会使值得引用计数加 1
    每一次对值地址的释放都会使值的引用计数减 1
    当一个值得引用计数为0时,该值就会被系统的垃圾回收机制回收

    循环引用

    ls1 = [111]
    ls2 = [222]
    ls1.append(ls2)
    ls2.append(ls1)
    print(ls1)    ======>[111, [222, [...]]]
    print(ls2)    ======>[222, [111, [...]]]
    循环导入会致使值得计数永远大于0,会造成内存泄漏

    标记删除

    标记:标记的过程其实就是,遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),
    然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,存放到新的内存空间中
    删除:删除的过程将遍历堆中所有的对象,将之前所有的内容全部清除

    分代回收

    分代回收:(垃圾回收机制的优化机制)   牺牲内存,优化时间
    分代:指的是根据存活时间来为变量划分不同等级(也就是不同的代)
    '''
    新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,
    那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),
    会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长),
    假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,
    接下来,青春代中的对象,也会以同样的方式被移动到老年代中。也就是等级(代)越高,被垃圾回收机制扫描的频率越低
    '''
    
    回收:依然是使用引用计数作为回收的依据

    正则:re

    正则:
    带语法的字符串,用来匹配目标字符串得到想要的字符串结果
    重点:1.正则就是字符串 2.正则语法 3.分组 4.Python中re的常用方法
    语法:re.findall(r're',r'目标字符串')
    print(re.findall(r'\a', r'123abc'))  # 用来转义,在正则中\代表匹配

    单个字符串

    匹配任意数字 d == [0-9]
    print(re.findall(r'd',r'qwe123ASD市东南方'))
    结果:['1', '2', '3']
    匹配非任意数字  D ==[^0-9]
    print(re.findall(r'D',r'qwe123ASD市东南方'))
    结果:['q', 'w', 'e', '\', 'A', 'S', 'D', '', '', '', '']
    a|b |c匹配a或b
    # print(re.findall(r'[a-z]|[A-Z]|d',r'qwe123ASD市东南方'))
    结果:['q', 'w', 'e', 'A', 'S', 'D']
    [a-zA-Z0-9]  匹配字母+数字
    print(re.findall(r'[a-zA-Z0-9]',r'qwe123ASD市东南方'))
    结果:['q', 'w', 'e', '1', '2', '3', 'A', 'S', 'D']
    匹配 字母+数字+_  w
    print(re.findall(r'w',r'qwe123ASD_市东南方'))
    结果:['q', 'w', 'e', '1', '2', '3', 'A', 'S', 'D', '_', '', '', '', '']
    匹配 非字母+数字+_   W
    print(re.findall(r'W',r'qwef123
    ASD	_
    市东南方'))
    结果:['\', '\', '\', '\']
    匹配  任意空白符 s
    print(re.findall(r's','qwef123
    ASD	_
    市东南方'))
    结果:['x0c', '
    ', '	', '
    ']
    匹配 非任意空白符 S
    print(re.findall(r'S','qwef123
    ASD	_
    市东南方'))
    结果: ['q', 'w', 'e', '1', '2', '3', 'A', 'S', 'D', '_', '', '', '', '']
    匹配所有单个字符(刨除换行)  .,
    print(re.findall(r'.','qwef123
    ASD	_
    市东南方'))
    结果:['q', 'w', 'e', 'x0c', '1', '2', '3', 'A', 'S', 'D', '	', '_', '
    ', '', '', '', '']

    多个字符

    匹配n到m个,贪婪匹配   {n,m}
    print(re.findall(r'o{1,2}', r'foodfoood'))
    结果:['oo', 'oo', 'o']
    匹配0到n个,贪婪匹配  {*}
    print(re.findall(r'zo*',r'zzozoozooozoo'))
    结果:['z', 'zo', 'zoo', 'zooo', 'zoo']
    匹配1到n个,贪婪匹配  {+}
    print(re.findall(r'zo+',r'zzozoozooozoo'))
    结果:['zo', 'zoo', 'zooo', 'zoo']
    匹配0到1个,贪婪匹配   {?}
    print(re.findall(r'zo?',r'zzozoozooozoo'))
    结果:['z', 'zo', 'zo', 'zo', 'zo']
    匹配1到n个,非贪婪匹配  {+?}
    print(re.findall(r'zo+?',r'zzozoozooozoo'))
    结果:['zo', 'zo', 'zo', 'zo']
    匹配0到n个,非贪婪匹配  {*?}
    print(re.findall(r'zo*?',r'zzozoozooozoo'))
    结果:['z', 'z', 'z', 'z', 'z']

    多行匹配

    re.S:将
    也能被.匹配  re.I:不区分大小写  re.M:结合^ $来使用,完成多行匹配
    print(re.findall(r'^owen.+vv$', 'owen_name_vv
    owen_age_vv
    zero_owen
    owen_oo', re.M))
    结果:['owen_name_vv', 'owen_age_vv']

    分组

    1.从左往右数数 ( 进行编号,自己的分组从1开始,group(0)代表匹配到的目标整体
    2.(?: ... ):取消所属分组,()就是普通(),可以将里面的信息作为整体包裹,但不产生分组
    regexp = re.compile('(?:(?:http://)(.+)/)')  # 生成正则对象
    target = regexp.match('http://www.baidu.com/')
    print(target.group(1))  # www.baidu.com
    结果:www.baidu.com

    拆分

    print(re.split('s', '123 456
    789	000'))
    结果:['123', '456', '789', '000']

    替换

    1.不参与匹配的原样带下 2.参与匹配的都会被替换为指定字符串
    3.在指定字符串值
    um拿到具体分组 4.其他字符串信息都是原样字符串
    print(re.sub('《(?:[a-z]+)(d+)(.{2})', r'\2abc21', '《abc123你好》'))
    结果:2abc你好123》
    print(re.subn('《(?:[a-z]+)(d+)(.{2})', r'\2abc21', '《abc123你好》'))
    print(re.sub('《(?:[a-z]+)(d+)(.{2})', r'\2abc21', '《abc123你好》'))
  • 相关阅读:
    ES6箭头函数中this的指向问题
    不借助vue-cli,自行构建一个vue项目
    Vue组件props选项-实现父子组件动态数据绑定
    Linux 基本操作命令
    Javascript
    ES6
    利用Gulp和Webpack进行项目自动化构建
    自定义View实现图片热区效果
    新年学习计划
    Activity跳转通过EventBus传值问题
  • 原文地址:https://www.cnblogs.com/wangtenghui/p/10725506.html
Copyright © 2011-2022 走看看