re.compile() / .search / .match()的使用与区别

本文详细介绍了Python中re模块的基本用法,包括re.match()与re.search()的区别及应用场景,通过具体示例展示了如何利用这两种方法进行字符串匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单讲两句:
re.match() 从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None
re.search()浏览全部字符串匹配第一符合规则的字符串,浏览整个字符串去匹配第一个,未匹配成功返回None
即他们的区别在于开始匹配的位置不同。

# coding:utf-8
'''
Note:
    re库笔记
Author:Qred
Date:2019/7/23
'''
import re
line  = 'Cats are smarter than dogs.'
# match()
searchObj = re.match('[ar]t+', line)
# 使用match方法,没有匹配结果

# search()
# searchObj = re.search('[ar]t+', line)
# 使用search方法,返回第一个匹配结果

if searchObj != None:
   print type(searchObj)
   print searchObj.group()
   

还有一个问题就是,如果字符串开头就与关键字不匹配,那么就无法使用.match()方法,如果一个字符串中有多个符合匹配规则的配置项,想获得第二个匹配结果,那么就无法是使用.search()方法。

为了更好的使用他们的匹配功能,或者玩点更高级点的用法,可以尝试的使用compile()方法。通过调用compile()实例的.match(),.search()方法,更好的时间关键字的检索。

看实例:

# 接上面的代码

# compile()
pattern = re.compile('[ar]t+')
# searchObj = pattern.search(line,12)
# ----------------------------------------
# 注意这里是使用的的 pattern子方法
# ----------------------------------------
searchObj = pattern.match(line, 12)
# 指定开始位置,进行匹配

if searchObj != None:
# 如果匹配结果不为空
   print type(searchObj)
   # 匹配结果类型
   print searchObj.group(0)
   #第一个匹配结果(使用.match() .search() 只会返回一个结果,所以这里的0可以省略)
   print searchObj.start()
   # 匹配结果的起始位置
   print searchObj.end()
   # 匹配结果的结束位置+1
   print searchObj.span()
   # 匹配结果的位置

使用.search(line,12)和.match(line, 12)输出的结果相同,因为我们在代码中指定了他们的相同的起始位置。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值