美文网首页胶水Python
re.match和re.search的区别

re.match和re.search的区别

作者: NiceBlueChai | 来源:发表于2017-11-16 20:24 被阅读26次

    re.match函数只匹配字符串的开始字符,如果开始的字符不符合正则表达式,匹配就会失败,返回None。
    re.search方法匹配整个字符串,直到找到一个匹配的对象,匹配结束没找到匹配值才返回None。

    #! /usr/bin/evn python
    #-*- coding:utf-8 -*-
    
    import re
    
    line='Cats are smarter than dogs'
    matchObj=re.match(r'dogs',line,re.M|re.I)
    if matchObj:
        print('use match,the match string is:',matchObj.group())
    else:
        print('No match string!!')
    
    matchObj=re.search(r'dogs',line,re.M|re.I)
    if matchObj:
        print('use search,the match string is:',matchObj.group())
    else:
        print('No search match string!!')
    

    执行结果如下:

    No match string!!
    use search,the match string is: dogs
    

    该示例中使用了match类中的分组方法——group。
    该方法定义如下:

    def group(self,*args):
        """Return one or more subgroups of the match.
        :type:T|tuple
        """
    
        pass
    

    groups([group],···]):获得或多个分组截获的字符串,指定多个参数时,以元祖形式返回。group1可以使用编号,也可以使用别名。编号0代表整个匹配的子串。不填写参数时返回group(0);没有截获字符串时返回None;截获多次字符串的组时,返回最后一次截获的子串。

    还有一个常用的分组方法groups。

    groups([default]):以元组形式返回全部分组截获的字符串,相当于调用group(1,2,···;last)。
    default表示没有截获字符串时以这个值代替,默认为None。

    编译

    当我们在Python中使用正则表达式时,re模块内部会做两件事情:
    (1)编译正则表达式,如果正则表达式的字符串本身不合法,就会报错
    (2)用编译后的正则表达式匹配字符串
    如果一个正则表达式需要重复使用几千次,处于效率考虑,我们可以预编译该正则表达式,这样重复使用时就不需要便宜这个步骤了,直接匹配即可:

    #! /usr/bin/python3
    #-*- coding:utf-8 -*-
    re_telephone=re.compile(r'^(\d{3})-(\d{3,8})$')
    print(re_telephone.match('010-12345').groups())
    print(re_telephone.match('010-8086').groups())
    

    执行结果:

    ('010','12345')
    ('010','8086')
    

    相关文章

      网友评论

        本文标题:re.match和re.search的区别

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