day 16

作者: 02b2972e6a93 | 来源:发表于2018-08-03 18:43 被阅读0次

    part 1 正则表达式

    正则表达式:用来做字符串查找、匹配、切割的一种工具。
    Python对正则表达式的支持,提供re模块(Python内置的模块)
    包含字符串匹配,查找,切割的相关的方法
    fullmatch(正则表达式,字符串):用正则表达式和字符串进行
    匹配,看能否成功匹配。
    正则表达式:是一个符合正则规范的字符串

    import re
    #正则表达式的字符串前面要加r阻止转义,
    # 因为正则表达式的符号中有很多带转义符号,
    # 其功能不是转义,而是表示特殊的意义。
    #1. .:匹配一个任意字符
    re_str = '.'
    re.fullmatch(re_str, 'a')
    #2.匹配第一个字符是a第二个字符是b
    re_str = 'ab'
    re_str = 'a.'
    #3匹配第一个字符是a第二个字符是任意字符的字符串
    re_str = r'a.'
    #4.\w:匹配一个字符是字母,数字,或者下划线
    re_str = r'\w'
    print(re.fullmatch(re_str,'b'))
    #5.\s匹配一个空白字符(空格、换行、制表符))
    re_str = 'ar\sb'
    #\d 匹配一个数字字符
    re_str = '\d\d\d'
    print(re.fullmatch(re_str,120))
    #6.边界检测
    \b
    #字符开开始和结束都是边界
    #匹配三个任意字符的前面和后面都是单词边界的字符串
    #^匹配字符串的开始
    #(^the)匹配以the为开头的字符串
    re_str = r'^the'
    print(re.fullmatch(re_str,'the'))
    #7.匹配字符串结束
    re_str = r'abc$'
    #8.\W 匹配非数字字母下划线
    
    #9.\S匹配非空白字符
    #10\D匹配非数字字符
    #11\B 检测非边界
    re_str = r'ab\B
    

    part 2

    import re
    
    """
    
    1.匹配中括号中出现的任意一个字符
    匹配一一个字符串,前三位是abc,第四位是字符1或者字符a
    """
    re_str = r'abc[1a]'
    print(re.fullmatch(re_str, 'abca'))
    
    #第一个是数字或者下划线,后面是abc
    re_str = r'[\d_]abc'
    print(re.fullmatch(re_str, '9abc'))
    
    #2.[^]匹配不在中括号中出现的任意一个字符
    re_str =r'abc[^\da]'
    #匹配一个字符串,前三位是abc,第四位不是数字字符也不是字符a
    
    #3.*匹配0次或者多次
    re_str =r'\d*abc'
    #匹配一个字符串前面是0个或者是多个数字字符,然后是abc
    # [0-9]匹配1到9
    # [a-z]匹配小写字母a-z
    # [A-Z]匹配任意一个大写字母
    #[a-zA-z]匹配任意字母
    #写一个正则表达式匹配判断一个字符串是数字字符串
    re_str = r'\d[0-9]*'
    print(re.fullmatch(re_str, '123'))
    
    #写一个正则表达式检测一个字符串是否是合格的标识符(字母数字下划线)
    re_str = r'[a-zA-z_]\w*'
    print(re.fullmatch(re_str, 'name'))
    #4.+:匹配一个字符串或者多次
    #匹配一个字符串开头出现一个或者多次数字字符,然后在有0次或者多次数字,字母,下划线
    re_str = r'\d+\w*'
    print(re.fullmatch(re_str, '12u3abc'))
    #5.?:匹配出现0次或者1次
    re_str = r'[a-z]?123'
    print(re.fullmatch(re_str, 'a123'))
    
    #判断一个字符串是不是正整数字符串
    re_str = r'[+]?[1-9]\d*'
    print(re.fullmatch(re_str, '+0123'))
    #6匹配N次{N}
    re_str = r'\d{5}abc'
    #前面5个数字然后abc
    
    #6.{n,} >=n次
    #7,{m,n}最少M次最多N次
    #8 |:分支
    #匹配一个字符串,是三个数字字符或者三个小写字母
    re_str = r'\d{3}|\[a-z]{3}'
    
    #9括号()匹配的时候是分组,让括号中的正则条件变成一个整体
      """========以下了解========"""
        # 尽可能少:在能够匹配到的前提下尽可能少
        # 10. *? 重复任意次,尽可能少的重复
        re_str = r'ba*?b'
        print(re.match(re_str, 'baabaa'))
    
        # 11. +? 重复一次或多次,尽可能少的重复
        re_str = r'ba+?'
        print(re.match(re_str, 'baaaa'))
    
        # 12. ?? 重复0次或者1次, 尽可能少的重复
        re_str = r'b??'
    
        # 13. {N,}? 重复至少N次,尽可能少的重复
        # 14. {N, M}? 重复N到M次,尽可能少的重复
    

    part 3 转义

    1.特殊符号转义
    正则中:. \ [] {} () * + ? ^ $ | 这些字符有特殊意义,所以在正则表达式中,
    如果想要单纯表达这些字符,需要在前面加'';

    注意:1. -,[],^,\ 在中括号中可能是特殊的符号,需要加
    2. . {} () * + ? $ |在中括号中可以不用加,来表示字符

    part 4 模块方法

    import re
    """
    1.compile(正则字符串)讲正则表达式字符串转换成正则表达式对象
    #转换成正则表达式对象后,可以通过对象调用方法。
    """
    re_obct = re.compile(r'\w{6,12}')
    print(re_obct.fullmatch('dwadwa'))
    
    #匹配相关的方法
    #2.full,match(正则表达式,需要匹配的字符串)完全匹配
    #返回值是匹配对象,如果不成功返回None
    match = re.fullmatch('\w{3}', '132')
    print(match)
    #a.获取匹配到的结果
    print(match.group())
    #b.获取匹配到的范围
    print(match.span())
    print(match.start())#开始下标
    print(match.end())#结束下标
    print(match.string)
    #3.match(正则表达式,字符串)不完全匹配,从字符串开头匹配,匹配到正则表达式对应的范围为止。
    match = re.match(r'\w{3}', 'hedslakdl')
    print(match.group())
    print(match.string)
    #应用:判断一个字符串是否以某种字符串开头
    #4.search(正则表达式,字符串)在指定的字符串中查找某种字符串(以正则表达式来描述)
    print(re.search(r'\d{2,}[a-z]', '1245465dwad113'))
    
    #返回值是匹配对象,如果找不到返回None
    #判断一个字符串中是否包含某种字符串
    
    #5.findall(正则表达式,字符串)获取指定字符串中所有满足正则条件的所有的子串
    #返回值是一个列表,列表里都是符合要求的字符串
    result = re.findall(r'[a-zA-Z](\d+)','a132bdwa456465dwa')
    print(result)
    #注意:在通过正则表达式获取子串的时候,可以通过在正则表达式中添加括号,来约束获取的内容(只获取括号中匹配的内容)匹配所有。
    #应用:字符串提取
    #括号语法无效
    result = re.finditer(r'[a-zA-Z](\d+)','a132bdwa456465dwa')#返回一个迭代器,迭代器的内容是匹配对象
    print(result.__next__())
    
    #7.re.split(正则表达式,字符串)按正则表达式匹配到的字符串进行切割
    result = re.split(r'/d+', '12ds4a364dsa4d3sa15')
    print(result)
    #sub替换(正则表达式,替换字符串,原字符串)原字符串查找符合正则的子串,替换成新的字符串
    #将制定字符串所有的SB替换成*
    str1 = '傻逼,你好sb,你全家都是SB,傻逼,傻子'
    result = re.sub(r'sb|SB|Sb|sB|傻逼|傻', '**', str1)
    print(result)
    
    

    相关文章

      网友评论

          本文标题:day 16

          本文链接:https://www.haomeiwen.com/subject/jayuvftx.html