博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存管理 re模块
阅读量:4356 次
发布时间:2019-06-07

本文共 12006 字,大约阅读时间需要 40 分钟。

# 内存垃圾回收机制:#     工作原理:引用计数#         引用就+1 释放就是-1 当计数为0时 就会被垃圾回收机制回收#     标记清除:解决循环引用导致的内存泄漏#         标记:GC roots可以直接或间接访问到的数据,都标记为存活状态#         清除:触发标记清楚动作后,将所有存活状态的变量复制到新空间,将老空间中的所有值清空#       分代回收:提高回收效率的优化策略#         分代:将产期存活的变量移至更高代,检查频率降低#         回收:回收的依据还是采用引用计数#          循环引用 => 内存泄漏#             ls1 = [666]#             ls2 = [888]#             ls1.append(ls2)#             ls2.append(ls1)# print(ls1)  [666, [888, [...]]]# print(ls2)[888, [666, [...]]]# re 正则# 一什么是正则?# 正则就是用一些具有特殊含义的符号组合到一起(称之为正则表达式)来描述字符或者字符串的方法# 或者说:正则就是用来描述一类事物的规则,(在python中)它内嵌在python中,并通过re模块实现。正则表达式模式被编译成一系列的字节码。然后由c编写的皮匹配引擎执行# 二常用匹配模式(元字符)#     \w  匹配字母数字及下划线#     \W 匹配非字母数字下划线#     \s 匹配任意空白字符 等价于[\t\n\r\f]#     \S 匹配任意非空字符#     \d 匹配任意数字,等价于[0-9]#     \D 匹配任意非数字#     \A 匹配字符串开始#     \Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串#     \z 匹配字符串结束#     \G 匹配最后匹配完成的位置#     \n 匹配一个换行符#     \t 匹配一个制表符#     ^  匹配字符串的开头#     $  匹配字符串的末尾#     .  匹配任意字符,除来换行符,当re.DOTALL标记被指定是,则可以匹配包含换行符的任意字符#     [...]  用来表示一组字符,单独列出来:[amk] 匹配 'a','m'或'k'#     [^....] 不在[]的字符: [^abc]: 匹配除了a b c 之外的字符#     *  匹配0个或多个表达式#     +  匹配1个或多个的表达式#     ?  匹配0个或1个有前面的正则表达式定义的片段,非贪婪方式#     {n}  精确匹配n个前面表达式#     {n,m}  匹配n到m次由前面的正则表达式定义的片段,贪婪方式#     a|b  匹配a或b#     () 匹配括号内的表达式,也表示一个组import re# s="12345http://www.baidu.com/12htp46"# res=re.findall(r'http://www.baidu.com/',s)# print(res)   #['http://www.baidu.com/']# 转义# print(re.findall(r'\\a',r'123\adc'))  #['\\a'] 用来转义,在正则中\\a代表\a 原义的字符串前面要加r# print(re.findall('a',r'123\abcabc')) #['a', 'a'] 字母# print(re.findall('\d',r'123\abcabc'))  #['1', '2', '3'] 数字# print(re.findall('\D',r'123\abcabc'))  #['\\', 'a', 'b', 'c', 'a', 'b', 'c']非数字# print(re.findall('[0-9]',r'123\abcabc')) #['1', '2', '3'] 匹配任意一个数字# 列表中-在中间表示从0到9之间的数字  [- 0 9 ]或者[0 9 -] 表示匹配列表中 -   0   9 三个中的任意一个# print(re.findall('[A-z]|[a-z]',r'123\abcabcABC'))# #['\\', 'a', 'b', 'c', 'a', 'b', 'c', 'A', 'B', 'C'] ascii码表中[65-122]|[97-122]包含\# print(re.findall('[A-Z]|[a-z]',r'123\abcabcABC'))# #['a', 'b', 'c', 'a', 'b', 'c', 'A', 'B', 'C']# print(re.findall('[0-3]|[6-9]',r'123\abcabcABC48'))# #['1', '2', '3', '8']# print(re.findall('[A-Za-z0-9好]',r'123[\abcabcABC好好'))# #['1', '2', '3', 'a', 'b', 'c', 'a', 'b', 'c', 'A', 'B', 'C', '好', '好']# print(re.findall('\w',r'123[\abcabcABC*_12'))# #['1', '2', '3', 'a', 'b', 'c', 'a', 'b', 'c', 'A', 'B', 'C', '_', '1', '2'] 字母数字下划线# print(re.findall('\S',r'123[\abcabcABC好好*_12')) #任意非空字符# ['1', '2', '3', '[', '\\', 'a', 'b', 'c', 'a', 'b', 'c', 'A', 'B', 'C', '好', '好', '*', '_', '1', '2']# print(re.findall('\s','123[\n\t\r\abcabcABC好好*_12')) #匹配所有任意空白字符# ['\n', '\t', '\r']# print(re.findall('.','123[\a b\nc\ta\rbcABC好好*_12'))  #匹配任意字符 除了换行符# ['1', '2', '3', '[', '\x07', ' ', 'b', 'c', '\t', 'a', '\r', 'b', 'c', 'A', 'B', 'C', '好', '好', '*', '_', '1', '2']# print(re.findall('.','\a'))  #['\x07']# print(re.findall('ab',r'123\abcabc')) #['ab', 'ab']# print(re.findall('[a-z]{2}',r'123\abcabc')) #['ab', 'ca', 'bc'] {n} n代表个数 a-z中的任意两个# print(re.findall('o{2,}','foodfooood')) #['oo', 'oooo'] {n,}n到多个 贪婪匹配 尽可能的多的匹配# print(re.findall('o{1,2}','foodfooood'))  #['oo', 'oo', 'oo'] {n,m} n到m个贪婪匹配,尽可能多的匹配(1到2个)# print(re.findall('zo*','zzozoozooo')) #  ['oo', 'oo', 'oo'] {,n} 0到n个 贪婪匹配# print(re.findall('zo+','zzozoozooo')) #['zo', 'zoo', 'zooo']  {,n} 1到n个 贪婪匹配# print(re.findall('zo?','zzozoozooo'))  #['z', 'zo', 'zo', 'zo'] {0,1} 0到1个,贪婪匹配,尽可能多的匹配# print(re.findall('zo+?','zzozoozooo'))  #['zo', 'zo', 'zo']  {1,n} 1到n个,非贪婪匹配,尽可能少的匹配 == {1}# print(re.findall('zo*?','zzozoozooo')) #['z', 'z', 'z', 'z'] {0,n} 1到n个,非贪婪匹配,尽可能少的匹配 == {0}# 多行匹配# re.S 将\n也能被.匹配  re.I :不区分大小写  re.M 结合^ $ 来使用,完成多行匹配# print(re.findall('^owen.+vv$','owen_name_vv\nowen_age_vv\nzero_owen\nowen_oo',re.M))# ['owen_name_vv', 'owen_age_vv']# result=re.findall(r'^http://.+/$','http://www.baidu.com/\nhttp://www.sina.com.cn/',re.M)# print(result)# ['http://www.baidu.com/', 'http://www.sina.com.cn/']# for res in result:#     print(res)# http: // www.baidu.com /# http: // www.sina.com.cn /# t=re.match('http://(.+)/',res,) #相当于search的从头开始找# print(t)# t=re.match('http://(.+)/',res,).group()# print(t)# http: // www.baidu.com /# http: // www.sina.com.cn /# 
#
# print(t.group(0)) # group(0)代表的是('http://(.+)/) 0:最外层的括号#
#
# print(t.group(1)) # group(1)代表的是('http://(.+)/) 1:最外层的里面的左边的第一个左括号(# www.baidu.com# www.sina.com.cn# 分组:# 1从左往右数 " ( " 进行编号,自己的分组从1开始,group(0)代表匹配的目标整体# 2.(?:....):取消所属分组,()就是普通的括号,可以将里面的信息作为整体包裹,但不产生分组# regexp = re.compile ('(?:(?:http://)\((.+)\)/)') #\( \) 转义成括号# target=regexp.match('http://(www.baidu,com)/')# print(target.group(0)) #http://(www.baidu,com)/ #将里面的信息作为整体包裹,但不产生分组# print(target.group(1)) #www.baidu,com# 替换:# 1.不参与匹配的原样带下 2 参与匹配的都会被替换为指定字符串# 3 在不指定字符串值 \num拿到具体分组 4 其他字符串信息都是原样字符串# print(re.sub('《(?:[a-z]+)(\d+)(.{2})',r'\0\2abc\2\1','《abc123你好》'))# 0:《abc 1:(123) 2:(你好) 》取不到不参与替换原样带下# 你好abc你好123》# print(re.sub('《(?:[a-z]+)(\d+)(.{2})',r'\1\2','《abc123你好》'))# print(re.findall('[a-z]{2}',r'123\abcabce')) #['ab', 'ca', 'bc'] {n} n代表个数 a-z中的任意两个# ['ab', 'ca', 'bc']import re# print(re.findall('\w','ab 12\+-*&_')) #['a', 'b', '1', '2', '_']# print(re.findall('\W','ab 12\+-*&_')) # [' ', '\\', '+', '-', '*', '&']# print(re.findall('\S','ab\r1\n2\t\+-*&_')) #非空字符串# ['a', 'b', '1', '2', '\\', '+', '-', '*', '&', '_']# print(re.findall('\s','ab\r1\n2\t\+-*&_')) #匹配任意空字符串['\r', '\n', '\t']# print(re.findall('\d','ab\r1\n2\t\+-*&_')) #['1', '2']# print(re.findall('\D','ab\r1\n2\t\+-*&_')) #任意非数字# ['a', 'b', '\r', '\n', '\t', '\\', '+', '-', '*', '&', '_']# print(re.findall('\w_sb','egon alex_sb123123wxx_sb,lxx_sb')) # 字母数字下划线 ['x_sb', 'x_sb', 'x_sb']# print(re.findall('\Aalex','abcalex is salexb')) # 匹配字符串开始 []# print(re.findall('\Aalex','alex is salexb')) #匹配字符串开始 ['alex']# print(re.findall('^alex','alex is salexb')) #匹配字符串的开头 ['alex']# print(re.findall('sb\Z','alexsb is sblalexbsb')) #匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串['sb']# print(re.findall('sb$','alexsb is sbalexbsb')) # 匹配字符串末尾['sb']# print(re.findall('^ebn$','ebn1')) #匹配开头 匹配结尾[]# print(re.findall('a\nc','a\nc a\tc alc')) #['a\nc']# 重复匹配# . ? * + {m,n} .* .*?# 1 . 代表除了换行符外的任意一个字符# print(re.findall('a.c','abc alc aAc aaaaa\nc')) #['abc', 'alc', 'aAc']# print(re.findall('a.c','abc alc aAc aaaaca\nc',re.DOTALL))# ['abc', 'alc', 'aAc', 'aac', 'a\nc']# 2 ? 代表左边那一个字符重复0次或1次# print(re.findall('ab?','a ab abb abbb abbbbb')) #['a', 'ab', 'ab', 'ab', 'ab']# 3 * 代表左边那一个字符出席那0次或无穷次# print(re.findall('ab*','a ab abb abbb abbbb')) #['a', 'ab', 'abb', 'abbb', 'abbbb']# 4 + 代表左边那一个字符出现1次或无穷次# print(re.findall('ab+','a ab abb abbba abbbbb')) #['ab', 'abb', 'abbb', 'abbbbb']# 5 {m,n}:代表左边那一个字符出现m次到n次# print(re.findall('ab?','a ab abb abbbbb ')) #['a', 'ab', 'ab', 'ab']# print(re.findall('ab{0,1}','a ab abb abbbbb ')) #['a', 'ab', 'ab', 'ab']# print(re.findall('ab*','a ab abb abbb abbb abbbbb'))# ['a', 'ab', 'abb', 'abbb', 'abbb', 'abbbbb']# print(re.findall('ab{0,}','a ab abb abbb abbb abbbbb'))# ['a', 'ab', 'abb', 'abbb', 'abbb', 'abbbbb']# print(re.findall('ab+','a ab abb abbbb abbbb'))# ['ab', 'abb', 'abbbb', 'abbbb']# print(re.findall('ab{1,}','a ab abb abbbb abbbb'))# ['ab', 'abb', 'abbbb', 'abbbb']# print(re.findall('ab{1,3}','a ab abb abbb abbbbbb'))# ['ab', 'abb', 'abbb', 'abbb']# 6 .* 匹配任意长度, 任意的字符 =>贪婪匹配# print(re.findall('a.*c','ac a123c aaaac a*123)()c asdfdffdf'))# ['ac a123c aaaac a*123)()c']# 7 .*? :非贪婪匹配 {0,1}最少为零个中间值# print(re.findall('a.*?c',' ac a123c456c')) #['a123c']# ():分组# print(re.findall('(alex_sb)','alex_sb asdfgdsfdsfh_sb'))# ['alex'] 只返回匹配到的括号内的内容# print(re.findall(# 'herf="(.*?)"',# '
  • 博客园
  • '# ))# [] 最少0个# []:匹配一个指定返回内的字符(这一个字符来自于括号内定义的)# print(re.findall('a[0-9][0-9]c','alc a+c a2c a9c allc a-c acc aAc'))# []# 当需要被当众普通符号匹配时,只嗯能放到[]的最左边或最右边import re# print(re.findall('a[- + *]c', 'alc a+c a2c a9c a*c allc a-c acc aAc'))# ['a+c', 'a*c', 'a-c']# print(re.findall('a[a-zA-Z]c','alc a+c a2c a9c a*c allc a-c acc aAc'))# ['alc', 'acc', 'aAc']# []内的^代表取反的意思# print(re.findall('a[^a-zA-Z]c','alc a+c a2C a9c a*c allc a-c acc aAc'))# ['a+c', 'a9c', 'a*c', 'a-c']# print(re.findall('a[^0-9]c','a c alc a+c a2c a9c a*c allc a-c acc aAc'))# ['a c', 'alc', 'a+c', 'a*c', 'a-c', 'acc', 'aAc']# print(re.findall('([a-z]+)_sb','egon alex_sb123njjkjkjkjk_sb,lxx_sb'))# ['alex', 'njjkjkjkjk', 'lxx']# |: 或者# print(re.findall('compan(ies|y)','Too many companies have gone bankrupt,and the next one is my company'))# ['ies', 'y']# (?:) 代表取匹配成功的所有内容,而不是仅仅只是括号内的内容# print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt,and the next one is my company'))# ['companies', 'company']# print(re.findall('alex|sb','alex sb sb asjkjkjkgon alex sb egon'))# ['alex', 'sb', 'sb', 'alex', 'sb']# re模块的其他方法:# print(re.findall('alex|sb','123123 alex sb sfjdkklkgon alex sb egon '))# print(re.search('alex|sb','123123 alex sb sfjdkklkgon alex sb egon ').group())# print(re.search('^alex','123123 alex sb sfjdkklkgon alex sb egon '))# ['alex', 'sb', 'alex', 'sb'] 找所有的# alex search 从左往右找到第一个就停下# None 从头开始匹配 不满足# print(re.search('^alex', 'alex sb sadfsadfasdfegon alex sb egon').group())# print(re.match('alex', '1alex sb sadfsadfasdfegon alex sb egon'))# alex 从头找 找到一个结束# None 相当于search的从头开始匹配 不满足# print(re.match('alex', 'alex sb sadfsadfasdfegon alex sb egon').group())# print(re.match('alex', 'alex sb sadfsadfasdfegon alex sb egon'))# alex 从头开始匹配 满足 group取值#
    从头开始匹配 满足# print(re.match('alex', '123213 alex sb sadfsadfasdfegon alex sb egon'))# None# info='a:b:c:d'# print(info.split(':'))# print(re.split(':',info))# ['a', 'b', 'c', 'd']# ['a', 'b', 'c', 'd']# info =r'get :a.txt\3333/rwx'# print(re.split('[:\\\/]',info))# ['get ', 'a.txt', '3333', 'rwx']# print('egon is beutifull egon'.replace('egon','EGON',1))# EGON is beutifull egon# print(re.sub('(.*?)(egon)(.*?)(egon)(.*?)',r'\1\2\3EGON\5','123 egon is beauifull egon 123'))# (123 )(egon)( is beutifull )(egon)( 123)# 123 egon is beauifull EGON 123# \1\2\3EGON\5# print(re.sub('(lqz)(.*?)(SB)',r'\3\2\1','lqz is SB'))# SB is lqz# print(re.sub('([a-zA-Z)]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)',r'\5\2\3\4\1',r'lqzzzzz123+ is SB'))# SB123+ is lqzzzzz# pattern =re.compile('alex')# print(pattern.findall('alex is alex alex'))# print(pattern.search('alex is alex alex').group())# print(pattern.match('alex is alex alex').group())# print(pattern.findall('alexfjksdjgkjskdfj is alex alex'))# ['alex', 'alex', 'alex']# alex# alex# ['alex', 'alex', 'alex']

    操作分组的方法

    (?P<name>...):有名分组

    返回值是math匹配的结果对象,可以 .group(组序号|组名)来取具体组的信息

    res=re.match('(\d{3})(?P<center>\d{3})(\d{3})','123456789)

    print(res.group('center'))

    456

    # print(re.findall('\d*', '<123456789>'))# ['', '123456789', '', '']  #先匹配< 后匹配123456789 在匹配> 最后匹配整体# 1、书写可以配身份证的正则表达式#   身份证:18位 由17位数字本体码和1位校验码组成排列顺序从左至右依次为:#   六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。# [1-7][0-9]{5}  #六位数字地址码# (?:19[0-9]{2}|20[01][0-9])             #  1900-2019# (?:0[0-9]|1[12])                      #01-12 月# (?:0[0-9]|[12][0-9]|3[01])             #01-31 天# [0-9]{3}                              #三为数字顺序码# [0-9Xx]                            #一位验证码# [1-7][0-9]{5}(?:19[0-9]{2}|20[01][0-9])(?:0[0-9]|1[12])(?:0[0-9]|[12][0-9]|3[01])[0-9]{3}[0-9Xx]# 2 书写可以匹配邮箱的正则表达式# 2530302605@qq.com               \.转义点把它当成普通的.匹配# [a-zA-Z0-9]\w{,15}@[176|178|192]\.[com|com\.cn|cn]# 获取百度首页图片地址import reimport requestsresponds=requests.get('http://www.baidu.com/')print(responds)content=responds.text# print(content)content+='http://www.baidu.com/wimg/gs.gif'res1_list=re.findall('www[^w]*?(?:gif|png)',content)print(res1_list)# ['www.baidu.com/img/bd_logo1.png', 'www.baidu.com/bdorz/login.gif', 'www.baidu.com/bdorz/login.gif', 'www.baidu.com/img/gs.gif']res_list=re.findall('www.{1,30}(?:gif|png)',content)print(res_list)# ['www.baidu.com/img/bd_logo1.png', 'www.baidu.com/bdorz/login.gif', 'www.baidu.com/bdorz/login.gif', 'www.baidu.com/img/gs.gif', 'www.baidu.com/wimg/gs.gif']#
    小练习

     

    转载于:https://www.cnblogs.com/lakei/p/10725004.html

    你可能感兴趣的文章
    POJ 1321 棋盘问题(状态压缩DP | DFS)
    查看>>
    LA3902 Networlk
    查看>>
    BZOJ1511: [POI2006]OKR-Periods of Words
    查看>>
    docker常用命令
    查看>>
    熔断器设计模式
    查看>>
    WMAP 启动报错 PHP- 提示缺少 msvcr110.dll 的问题
    查看>>
    linux的chmod,chown命令详解
    查看>>
    Excel VBA 基本概念
    查看>>
    testlink的那些坑
    查看>>
    2019-04-17 快速备份存储过程
    查看>>
    PAT A1115 Counting Nodes in a BST (30 分)——二叉搜索树,层序遍历或者dfs
    查看>>
    汤姆叔叔的小屋
    查看>>
    第二周 1 时间换算(5分)
    查看>>
    定义label标签宽度需要设置display:inline-block;
    查看>>
    OUC_Summer Training_ DIV2_#2之解题策略 715
    查看>>
    Centos6.8搭建Git服务(git版本可选)(转)
    查看>>
    转载:Linux下用mutt给QQ邮箱发匿名邮件
    查看>>
    [模版]平衡树splay2
    查看>>
    sed匹配多行并替换其中的内容
    查看>>
    android中数据库的介绍及实例
    查看>>