zoukankan      html  css  js  c++  java
  • 模块介绍3

    day 16

    一、正则表达式(re模块)

    1、常用的匹配符号

    #import re
     w :匹配字母数字和下划线
    # print(re.findall("w","naj_%^*(%jn"))
    # print(re.findall("ww","naj_%^*(%jn"))
     W:匹配除了字母数字和下划线的其他字符
    ​
     s:匹配空的字符包含空格 换行符 	等看不见的
     S:取反s
    ​
     ^: 仅从头开始匹配
    # print(re.findall('^alex',' alex is alex is alex'))
    ​
     $: 仅从尾部开始匹配
    # print(re.findall('alex$',' alex is alex is alex1'))
    ​
     d:匹配数字
     D:匹配费数字字符
    ​
    ​
    #重复匹配
    . 匹配除了换行符以外的任意字符
    # print(re.findall("a.c","a9c  a*c a
    c"))
    # print(re.findall("a.c","a9c  a*c a
    c",re.DOTALL))  #这样就可以匹配包含换行符以外的任意字符了
    ​
    ​
    [] 表示匹配中括弧内指定的任意一个字符
    # print(re.findall("a[0-9]c","a9c a7c"))
    # print(re.findall("a[-+*/]c","a-c a^c"))
    ​
     ?:代表左边的字符重复0次或1次
    # print(re.findall("ab?","a ab abb abbb abbbbb"))
    # result:['a', 'ab', 'ab', 'ab', 'ab']
     *:代表左边的字符重复0次到无穷次次
    # print(re.findall("ab*","a ab abb abbb abbbbb"))
    # result:['a', 'ab', 'abb', 'abbb', 'abbbbb']
     +:代表左边的字符重复1次到无穷次
    # print(re.findall("ab+","a ab abb abbb abbbbb"))
    # result:['ab', 'abb', 'abbb', 'abbbbb']
    {n,m}:代表左边的字符重复n次到m次
    # print(re.findall("ab{0,}","a ab abb abbb abbbbb")) #不写表示到无穷次 同*
    # result:['a', 'ab', 'abb', 'abbb', 'abbbbb']
    # print(re.findall("ab{0,1}","a ab abb abbb abbbbb"))  #同?
    # print(re.findall("ab{1,}","a ab abb abbb abbbbb"))  #同+
    ​
    ​
     .*: 匹配任意0个到无穷个字符,贪婪匹配
    # print(re.findall('a.*c','a123213123asdfasdfc123123123123+-0)((c123123'))
    ​
    ​
    .*?:匹配任意0个到无穷个字符,非贪婪匹配
    # print(re.findall('a.*?c','a123213123asdfasdfc123123123123+-0)((c123123'))
    ​
    ​
     斜杠的用法
    # print(re.findall("a\\c","ac a9c"))  #两个转意斜杠
    # result:['a\c']    #其中一个斜杠为转意的意思
    |:或者   ()分组
    # print(re.findall("egon(sb|nb)","egonnb dao lda egonsb "))
    # result:['nb', 'sb']
    # print(re.findall("egon(?:sb|nb)","egonnb dao lda egonsb "))
    # result:['egonnb', 'egonsb']
    ​
     I 忽略大小写
    # print(re.findall("alex","aLex ALEX Alex",re.I))
    # ['aLex', 'ALEX', 'Alex']
     M 以换行符为切分标志  进行切分
    # msg="""
    # baduabha egon
    # dbajhajcba egon
    # xbhnauhnihbaegon
    # """
    # print(re.findall("egon$",msg))
    # result:['egon']
    # print(re.findall("egon$",msg,re.M))
    # result:['egon', 'egon', 'egon']
    # print(re.findall("egon",msg,re.M))
    # result:['egon', 'egon', 'egon']

    2、re模块下的方法:

    # ===========================re模块提供的方法介绍===========================
    #import re
    1  findall 返回所有满足匹配条件的结果,放在列表里
    #print(re.findall('e','alex make love') )   # result:['e', 'e', 'e']
    2 search 只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
    #print(re.search('e','alex love').group()) # result:e,
    3 match 同search,不过在字符串开始处进行匹配,完全可以用search+^代替match
    #print(re.match('e','alex make love'))    #result:None,
    4 split 先按'a'分割得到'''bcd',再对'''bcd'分别按'b'分割
    #print(re.split('[ab]','abcd'))     #result:['', '', 'cd'],
    #5
    print('===>',re.sub('a','A','alex make love')) #===> Alex mAke love,不指定n,默认替换所有
    print('===>',re.sub('a','A','alex make love',1)) #===> Alex make love
    print('===>',re.sub('a','A','alex make love',2)) #===> Alex mAke love
    print('===>',re.sub('^(w+)(.*?s)(w+)(.*?s)(w+)(.*?)$',r'52341','alex make love')) #===> love make alex
    print('===>',re.subn('a','A','alex make love')) #===> ('Alex mAke love', 2),结果带有总共替换的个数
    ​
    ​
    #6
    obj=re.compile('d{2}')
    ​
    print(obj.search('abc123eeee').group()) #12
    print(obj.findall('abc123eeee')) #['12'],重用了obj

    二、hashlib模块

    1、什么是hash hash是一种算法,该算法接受一系列的数据,经过运算会得到一个hash值, hash值具备三大特性: a、只要传入的内容一样,那么得到的hash值一定是一样

    b、只要采用hash算法固定,无论传入的内容多大,hash值的长度是固定

    c、hash值不可逆,即不能通过hash值逆推出内容

    2、为何要用hash

      特性1+2=>文件完整性校验 

    3、hashlib模块的使用

    import hashlib
     
    m=hashlib.md5()# m=hashlib.sha256()
     
    m.update('hello'.encode('utf8'))   #给hashlib传入原材料
    print(m.hexdigest())  #5d41402abc4b2a76b9719d911017c592  #根据算法计算出hash值
     
    m.update('alvin'.encode('utf8'))
    print(m.hexdigest())  #92a7e713c30abbb0319fa07da2a5c4af
     
    m2=hashlib.md5()
    m2.update('helloalvin'.encode('utf8'))
    print(m2.hexdigest()) #92a7e713c30abbb0319fa07da2a5c4af
    '''
    注意:把一段很长的数据update多次,与一次update这段长数据,得到的结果一样
    但是update多次为校验大文件提供了可能。
    '''

     

  • 相关阅读:
    JVM笔记3-java内存区域之运行时常量池
    JVM笔记2-Java虚拟机内存管理简介
    JVM笔记1-内存溢出分析问题与解决
    ActiveMq笔记1-消息可靠性理论
    python基础学习16----模块
    python基础学习15----异常处理
    在windows下搭建汇编编程环境
    python基础学习14----正则表达式
    python基础学习13----生成器&迭代器
    python基础学习12----装饰器
  • 原文地址:https://www.cnblogs.com/peng-zhao/p/10077912.html
Copyright © 2011-2022 走看看