• Python:Day19 正则表达式补充


    贪婪匹配

    贪婪匹配是指字符后面是*+?的时候,都是尽可能多的匹配,如果不想尽可能多的匹配,那么在这三个字符后面加?号即可,这样变成惰性匹配,按最少匹配。

    ret = re.findall('ab??','dfaabbbdwofj')
    
    print(ret)  #['a', 'a']

    d  匹配任何十进制数;它相当于类 [0-9]。
    D 匹配任何非数字字符;它相当于类 [^0-9]。
    s  匹配任何空白字符;它相当于类 [ fv]。
    S 匹配任何非空白字符;它相当于类 [^ fv]。
    w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
    W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
      匹配一个特殊字符边界,比如空格 ,&,#等

    注意:以前这些只能用来匹配单个字符,如果想匹配多个,后面要加适当的元字符

    ret = re.findall('d','dfaabbbdwof123j')
    print(ret)  #['1', '2', '3']
    
    ret = re.findall('d{3}','dfaabbbdwof123j')
    print(ret)  #['123']
    
    ret = re.findall('d+','dfaabbbdwof123j')
    print(ret)  #['123']
    
    ret = re.findall('d*','dfaabbbdwof123j')
    print(ret)  #['', '', '', '', '', '', '', '', '', '', '', '123', '', '']

    分组( )

    ret = re.search('(ab)(ty)','erwabtyyy')
    print(ret.group())  #abty
    #search返回的是匹配到的整个字符
    
    ret = re.search('(ab)/(ty)*','erwab/tytyy')
    print(ret.group())  #ab/tyty
    #再次证明search返回的是匹配到的整个字符
    
    ret = re.findall('(ab)(ty)+','erwabtyfewwpabtytyab')
    print(ret)  #[('ab', 'ty'), ('ab', 'ty')]    为什么后面有元字符+,却不匹配后面一个ty???
    #findall默认只返回分组匹配到的字符,并且每个分组匹配到的字符用逗号隔开放在一个元组里面,作为一个整体
    
    ret = re.findall('(ab)/(ty)+','erwabtyfewwpab/tytyab')
    print(ret)  #[('ab', 'ty')]
    #再次证明findall默认只返回分组匹配到的字符,匹配规则中的其它字符不显示。
    
    ret = re.findall('(?:ab)/(?:ty)+','erwabtyfewwpab/tytyab')
    print(ret)  #['ab/tyty']  里面不再是一个元组了
    #如果想让findall返回整个规则匹配到的所有内容,在小括号中加上?:即可,此时返回的就是所有内容。
    
    #猜测:上面findall中(ty)后面的+没用可能是,这个元组不存储相同的元素。
  • 相关阅读:
    python yield yield from
    python isinstance()与type()的区别
    python isinstance用法
    python 展开嵌套的序列
    python getmtime() 最近修改文件内容的时间
    python getctime() 文件最后一次的改变时间
    python getatime() 查看文件的访问时间
    python模拟随机游走
    getopt例子
    matplotlib 代码风格
  • 原文地址:https://www.cnblogs.com/sq5288/p/8461721.html
Copyright © 2020-2023  润新知