re.match和re.search的区别

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')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • re模块 开始使用re Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串...
    Alex陌阅读 5,108评论 0 0
  • 该笔记整理自Wesley Chun著,孙波翔、李斌、李晗译,人民邮电出版社出版的《Python核心编程》第3版,还...
    hufengreborn阅读 6,303评论 0 2
  • python模块之re re:官方文档是最好的模块表达说明。 Regular expression operati...
    道无虚阅读 2,999评论 0 1
  • re模块手册 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以...
    喜欢吃栗子阅读 9,488评论 0 13
  • 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例...
    Python程序媛阅读 5,169评论 0 22

友情链接更多精彩内容