• python(33)——【re模块】


    re模块(正则表达式)

    • 就其本质而言,正则表达式是一种小型的、高度专业化的编程语言
    • 在Python中(它内嵌在python中),并通过re模块来实现,正则表达式被编译成一系列的字节码,然后由C编写的匹配引擎执行

    正则:模糊匹配(针对字符串的一些操作),匹配的是这些元素的共性

    字符匹配(普通字符,元字符)

    1.普通字符:大多数字符和字母都会和自身匹配

    import re
    print(re.findall('alex', 'aabuscdalexduye'))
    
    #执行结果:
    ['alex']

    2.元字符: . ^ * + ? {} [] | ()

    .   通配符(除了换行符 ),一个点代表一个字符

    import re
    print(re.findall('a.x', 'a0xuscdaexduayx'))
    print(re.findall('a..x', 'a01xuscdabexduayx'))
    print(re.findall('a...x', 'a01xuscdabexduayx'))
    
    #执行结果:
    ['a0x', 'aex', 'ayx']
    ['a01x', 'abex']
    []


    ^ 在字符串的开头进行内容匹配

    import re
    print(re.findall('a.x', 'awxuscdaexduayx'))
    print(re.findall('^a.x', 'awxuscdaexduayx'))
    print(re.findall('^a.x', 'axuscdaexduayx'))
    
    #执行结果:
    ['awx', 'aex', 'ayx']
    ['awx']
    []

    $ 在字符串的结尾进行内容匹配

    import re
    print(re.findall('a.x', 'awxuscdaexduayx'))
    print(re.findall('a.x$', 'awxuscdaexduayx'))
    print(re.findall('a.x$', 'axuscdaexduax'))
    
    #执行结果:
    ['awx', 'aex', 'ayx']
    ['ayx']
    []

    重复符号:* + ? {}

    * 代表 [0,∞)
    + 代表 [1, ∞]

    import re
    print(re.findall('alex*', 'aledhabeafaalexxg'))    #x的个数大于等于0便可以进行匹配
    print(re.findall('alex+', 'aledhabeafaalexxg'))    #x的个数大于等于1便可以进行匹配
    
    #执行结果:
    ['ale', 'alexx']
    ['alexx']

    ? 代表 [0, 1]

    import re
    print(re.findall('alex?', 'aledhabeafaalexxg'))    #x的个数等于0或者1便可以进行匹配
    
    #执行结果:
    ['ale', 'alex']

    {} 可以表示任何范围
    {0,} ==> *
    {1,} ==> +
    {0,1} ==> ?

    import re
    print(re.findall('alex{0,}', 'aledhabeafaalexxg'))
    print(re.findall('alex{1,}', 'aledhabeafaalexxg'))
    print(re.findall('alex{0,1}', 'aledhabeafaalexxg'))
    
    #执行结果:
    ['ale', 'alexx']
    ['alexx']
    ['ale', 'alex']

    #注意:* + ?等是贪婪匹配,也就是尽可能匹配,后面加?使其变成惰性匹配(所谓惰性匹配,是指最少匹配)

    import re
    print(re.findall('alex*', 'aledhabeafaalexxg')) #x大于等于0便可以匹配
    print(re.findall('alex*?', 'aledhabeafaalexxg'))    #x等于0匹配
    print(re.findall('alex+', 'alexxxdhalebeafaalexxg'))    #x大于等于1便可以匹配
    print(re.findall('alex+?', 'alexxxdhalebeafaalexxg'))    #x等于1匹配
    print(re.findall('alex?', 'aledhabeafalexaalexxg'))    #x等于0或者1可以匹配
    print(re.findall('alex??', 'aledhabeafalexaalexxg'))    #x等于0匹配
    
    #执行结果:
    ['ale', 'alexx']
    ['ale', 'ale']
    ['alexxx', 'alexx']
    ['alex', 'alex']
    ['ale', 'alex', 'alex']
    ['ale', 'ale', 'ale']

    [] 字符集:在字符集中,没有特殊符号(在字符集里有功能的符号:- ^ )

    import re
    print(re.findall('x[yz]c', 'xycssxcxzc')) #出现在字符集中的字符是或的关系
    
    #执行结果:
    ['xyc', 'xzc']
    import re
    print(re.findall('x[z*]c', 'x*cssxcxzzc')) #在字符集中,*没有特殊含义,只代表一个字符而已
    
    #执行结果:
    ['x*c']

    在字符集里有功能的符号:- 代表的意思是范围

    import re
    import re
    print(re.findall('x[abcdef]x','bamxadxbxaaxcxmm'))
    print(re.findall('x[a-f]x','bamxadxbxaaxcxmm'))
    print(re.findall('x[a-f]*x','xbamxadxbxaaxcxmmx'))
    
    #执行结果:
    ['xbx', 'xcx']
    ['xbx', 'xcx']
    ['xadx', 'xaax']

    在字符集里有功能的符号:^ 代表的意思是非

    import re
    print(re.findall('x[a-z]x','bamxaxbx1xcxmm'))
    print(re.findall('x[^a-z]x','bamxaxbx1xcxmm'))
    
    #执行结果:
    ['xax', 'xcx']
    ['x1x']

    在字符集里有功能的符号:

    • 后边跟元字符为去除特殊功能,比如.
    • 后边跟普通字符为实现特殊功能,比如d
      • d 匹配任何十进制数,它相当于类[0-9]
      • D 匹配任何非数字字符,它相当于类[^0-9]
      • s 匹配任何空白字符,它相当于类[ fv]
      • S 匹配任何非空白字符,它相当于类[^ fv]
      • w 匹配任何字母数字字符,它相当于类[a-zA-Z0-9]
      • W 匹配任何非字母数字字符,它相当于类[a-zA-Z0-9]
      •  匹配一个特殊字符边界,比如空格,&,#等
  • 相关阅读:
    I/O性能优化
    磁盘性能指标
    磁盘I/O工作原理
    文件系统工作原理
    Linux命令行工具之free命令
    内存性能优化
    内存工作原理
    内存中的Buffer和Cache的区别
    proc文件系统
    oracle 查询 LOB 字段大小
  • 原文地址:https://www.cnblogs.com/guoruxin/p/10529338.html
Copyright © 2020-2023  润新知