python中re.search()函数的用法

说到使用正则匹配字符串,就不得不说三个常用的匹配检索方法:re.search(),re.match()和re.findall()。
主要的区别是前两个方法只在目标字符串中匹配一次满足条件的正则表达式;而re.findall()方法匹配目标字符串中所有满足条件的正则表达式;另外re.match()只会匹配目标字符串开头是否满足正则表达式,若开头不满足则匹配失败,函数返回None;而re.search()则不限位置。
至于具体的细节,请参考:
Python 正则表达式
我这里想说的是re.search()方法的一些具体用法,直接上例子:

import re
text = "生于杭州市余杭区,成长经历地杭州市余杭区,居住较长的地区杭州市余杭区69年,无疫区居住史,无冶游史,有饮酒习惯,酒类:白酒,每天500-600ml,已饮30年,未戒。,有吸烟习惯,种类:纸烟,每天20-30支,已吸30年,已戒6年。,否认毒物及放射性物质接触史。既往在矿场工作。"
pattern = r'(有吸烟习惯)[,,]种类[::]纸烟[,,](每[天日周月]\d{1,2}-\d{1,2}[支根])[,,]已吸(\d{1,2}年)[,,](已戒)(\d{1,2}年)。'
result = re.search(pattern, text)
print(result)
print(type(result))
print(result[1])
print(type(result[1]))
print(result[2])
print(result[3])
print(result[4])
print(result[5])
print(result.group())
print(type(result.group()))
print(result.groups())
print(type(result.groups()))
print(result.group(1))
print(type(result.group(1)))
print(result.group(2))
print(result.group(3))
print(result.group(4))
print(result.group(5))

先简单说一下相关代码的意义:
text是目标字段;pattern是正则表达式,其中使用小括号“()”的作用在这里是捕获分组的意思,也就是在正则匹配的时候,将小括号中匹配到的文本编号并存储到内存中以供后续使用;中括号“[]”中的内容表示或的关系,比如“[,,]”就表示匹配一个汉语逗号“,”或者英文逗号“,”;"\d{1,2}"表示匹配至少一位至多两位数字,也就是匹配一位或者两位数字;group()方法是用来获得相应的分组结果的,其中“.group()”和“.group(0)”是完全一样的。

上述代码执行的结果是:

<_sre.SRE_Match object; span=(84, 116), match='有吸烟习惯,种类:纸烟,每天20-30支,已吸30年,已戒6年。'>
<class '_sre.SRE_Match'>
有吸烟习惯
<class 'str'>
每天20-3030年
已戒
6年
有吸烟习惯,种类:纸烟,每天20-30支,已吸30年,已戒6年。
<class 'str'>
('有吸烟习惯', '每天20-30支', '30年', '已戒', '6年')
<class 'tuple'>
有吸烟习惯
<class 'str'>
每天20-3030年
已戒
6

笔者发现了比较有意思的点,就是“result[1]”和"result.group(1)“的属性和值是完全一样的,也就是说就算你不使用group()方法进行分组,一旦你使用re.search(),其内部是已经分好了组的,可以通过"result[i]”(其中i是组号)直接获取对应组的值,这一点还是比较方便的。

  • 9
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值