zoukankan      html  css  js  c++  java
  • re模块简介及元字符和转义字符

    import re
    
    '''
    .代表通配符,除了
    不能匹配外,其它全部都能匹配,一个点代表一个字符
    ^代表字符串开头进行匹配,只能放在最前面
    $代表字符串结尾进行匹配,只能放在最后面
    *代表0到无穷次
    +代表1次到无穷次
    ?代表0次到1次
    {}代表自行控制多少次,{0,} == *,{1,} == +,{0,1} == ?,{6}代表6次,{1,6}代表1,2,3,4,5,6次
    *****注意:前面的*,+,?等都是贪婪匹配,也就是尽可能多的匹配;后面加?号使其变成惰性匹配,比如*?匹配0个,+?匹配1个*****
    []代表字符集,或的作用;
    '''
    
    # .代表通配符,除了
    不能匹配外,其它全部都能匹配,一个点代表一个字符
    # print(re.findall('a..x', 'fialexskdlfjaghx'))
    
    # ^代表字符串开头进行匹配,只能放在最前面
    # print(re.findall('^b.*b$', 'bslkafdsallkb'))
    # print(re.findall('^abc', 'abcsss'))
    
    # $代表字符串结尾进行匹配,只能放在最后面
    # print(re.findall('.+b$', 'asdfb'))
    
    # *代表0到无穷次
    # print(re.findall('abc*', 'abcccccbbabc'))
    # print(re.findall('a*', 'abakjalaaoaaia')) # 结果为['a', '', 'a', '', '', 'a', '', 'aa', '', 'aa', '', 'a', ''],*代表0到无穷次,那么不是a也代表匹配上了,因为0它也取,只不过为空
    # print(re.findall('d*$', 'dddlslslsdddd'))
    # print(re.findall('^d*', 'dddlslslsdddd'))
    
    # +代表1次到无穷次
    # print(re.findall('alex*', 'asddsaale')) # *代表0到无穷次,那么x可以没有,所以ale可以取出来
    # print(re.findall('alex+', 'asddsaale')) # +代表1到无穷次,那么x最少要有一个,所以alex取不出来
    
    # ?代表0次到1次
    # print(re.findall('alex?', 'asddsafale'))
    # print(re.findall('alex?', 'asddsalexxxxxxf'))
    
    # {}代表自行控制多少次,{0,} == *,{1,} == +,{0,1} == ?,{6}代表6次,{1,6}代表1,2,3,4,5,6次;*****大括号里的逗号不能有空格*****
    # print(re.findall('alex{0,}', 'ahskalefdsfd'))
    # print(re.findall('alex{1,}', 'ahskalexxxfdsfd'))
    # print(re.findall('alex{2,4}', 'alexxfkdjalexxxfkdialexjaleiialexxxx'))
    # print(re.findall('alex{3}', 'alexxxxx'))
    
    # 惰性匹配--->*?匹配0个,+?匹配一个
    # print(re.findall('alex*?', 'ale'))
    # print(re.findall('alex*?', 'alex'))
    # print(re.findall('alex*?', 'alexxxx'))
    # print(re.findall('alex+?', 'ale'))
    # print(re.findall('alex+?', 'alex'))
    # print(re.findall('alex+?', 'alexxxx'))
    
    # []代表字符集,或的作用
    # print(re.findall('www[baidu,]', 'wwwbwwwawwwiwwwdwwwuwww,')) # 里面的每一个字符都当作一次匹配,包括逗号:['wwwb', 'wwwa', 'wwwi', 'wwwd', 'wwwu', 'www,']
    # print(re.findall('[abc.*+]', 'aa.bs*cs+')) # ['a', 'a', '.', 'b', '*', 'c', '+']
    
    # 在字符集里有功能的符号:- ^ 
    # print(re.findall('[a-z]', '123abc456qweRTY')) # 代表小写字母a-z
    # print(re.findall('[A-Z]', '123ABC456QWErty')) # 代表大写字母A-Z
    # print(re.findall('[0-9]', '001122q3w4e5A6S7D89')) # 代表数字0-9
    # print(re.findall('q[^a-z]', 'qaqbqcqdqeqfq0q1qAq.q*q!q')) # 非,除小写字母a-z以外的都匹配
    # *****print(re.findall('([^()]*)', '12+(34*6+2-5*(2-1))')) # *****计算器作业---提取括号里的表达式---没有理解透到底怎么回事,需重新复习理解*****
    '''
    元字符之转义符
    反斜杠后边跟元字符去除特殊功能,比如.
    反斜杠后边跟普通字符实现特殊功能,比如d
    
    d 匹配任何十进制数;它相当于类 [0-9]。
    D 匹配任何非数字字符;它相当于类 [^0-9]。
    s 匹配任何空白字符;它相当于类 [ 	
    
    fv]。
    S 匹配任何非空白字符;它相当于类 [^ 	
    
    fv]。
    w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。下划线也可以匹配到
    W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
     匹配一个特殊字符边界,比如空格,&,#等
    '''
    # print(re.findall('d+', '1a2b34c56d78f90g'))
    # print(re.findall('D+', '1a2b34c56d78f90gw'))
    # print(re.findall('s+', '	abc
    123'))
    # print(re.findall('S+', '	abc
    123'))
    # print(re.findall('w+', '12,ab.00*cd?你好@'))
    # print(re.findall('W+', '12,ab.00*cd?你好@'))
    # print(re.findall('www.baidu.com', 'www.baidu.com')) # 如果不加转义符,后面的除了
    不能匹配外,其它都能匹配到
    
    print(re.findall('I', 'I am LIST')) # ['I', 'I']
    print(re.findall('^I', 'I am LIST')) # ['I']
    print(re.findall('^I', 'hello I am LIST')) # []
    print(re.findall('I', 'hello I am LIST')) # []
    print(re.findall(r'I', 'hello I am LIST')) # ['I'],r=rawstring,原生字符串,不做任何转义
    print(re.findall('I\b', 'hello I am LIST')) # ['I']
    
    print(re.findall('c\\l', 'abcle')) # l<--->re模块\l<--->python解释器\\l;结果['c\l'],其实是一个,但是python又一次转义多加了一个
    print(re.findall(r'c\l', 'abcle')) # l<--->re模块\l<--->python解释器\l
    while True: print('studying...')
  • 相关阅读:
    云计算OpenStack核心组件---keystone身份认证服务(5)
    云计算OpenStack环境搭建(4)
    云计算OpenStack共享组件---Memcache缓存系统(3)
    云计算OpenStack共享组件---信息队列rabbitmq(2)
    【面试题41】和为s的两个数字VS和为s的连续整数序列
    反转单链表
    【面试题40】数组中只出现一次的数字
    【面试题39】二叉树的深度
    【面试题38】数字在排序数组中出现的次数
    最少钱币问题
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14589659.html
Copyright © 2011-2022 走看看