美文网首页
Python正则表达式(12)

Python正则表达式(12)

作者: 纳米君 | 来源:发表于2018-05-02 21:45 被阅读14次
    1. 如果给出具体字符,就是精确匹配。
      \d 表示一个数字
      \w 表示一个数字或字母
      \s 表示一个空格
      \b 表示单词的开始或结束
      \A 匹配字符串的开始
      \Z 匹配字符串的结束
    2. . 匹配任意字符
    3. * 表示任意个字符(包含0个)
    4. + 表示至少1个字符
    5. ?表示0个或1个字符
    6. {n}表示n个字符
    7. {n, m}表示n到m个字符
    8. []表示范围,比如[0-9a-zA-Z_]表示1个数字或者字母或者下划线
    9. A|B匹配A或B
    10. ^ 表示行的开头,$ 表示行的结束

    Python内置了re模块。

    match()方法:字符串匹配表达式
    import re
    
    # match方法匹配成功,返回一个Match对象,否则返回None
    if re.match(r'^\d{3}\s*-\s*\d{8}$', '021 - 22815487'):
        print('ok')
    else:
        print('fail')
    
    split()方法:切分字符串,用正则表达式适用范围更广
    s = 'a, b ;  c'
    # 两者的差距,字符串split不能过滤;等
    print(s.split(' '))
    print(re.split(r'[\s\,\;]+', s))
    
    分组,用()表示的就是要提取的分组
    match = re.match(r'^(\d{3})-(\d{8})$', '021-55218547')
    # group(0)永远是原始的字符串
    print(match.group(0))
    print(match.group(1))
    print(match.group(2))
    
    # 匹配时间
    re_match = re.match(r'^([0|1]\d|2[0-3]):([0-5]\d):([0-5]\d)$', '00:00:00')
    print(re_match.group(0))
    # groups不包含原始字符串
    print(re_match.groups())
    
    正则匹配默认贪婪匹配,下面\d+匹配了所有,所以0*只能匹配空字符串了
    print(re.match(r'^(\d+)(0*)$', '1002300').groups())
    
    在\d+后面加上?,就是非贪婪匹配了,0*能匹配到00
    print(re.match(r'^(\d+?)(0*)$', '1002300').groups())
    
    编译

    当使用正则表达式时,re模块内部会干两件事情:

    1. 编译正则表达式,如果表达式不合法,会报错
    2. 用编译后的表达式去匹配字符串

    如果一个正则表达式要反复用到,可以预编译表达式:

    re_compile = re.compile(r'^(\w+|\w+.\w+)@(\w+.com)$')
    print(re_compile.match('370996@qq.com').groups())
    print(re_compile.match('sd%fgsg233_sa@163.com').groups())
    

    相关文章

      网友评论

          本文标题:Python正则表达式(12)

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