python之正则表达式(复杂篇)

本文介绍了Python正则表达式的复杂用法,包括边界匹配(^和$)、组的概念及应用、正则的匹配模式(如re.I、re.S等)、替换字符串的re.sub方法,以及re.match和re.search的区别。还讲解了如何拆分含有多种分隔符的字符串,强调了正则表达式在文本处理中的重要性。

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

前言

继上篇文章说了正则表达式的基础用法,那今天我们就继续说一下正则表达式的复杂的用法。好了,废话不多说,直接进入正题。

正文

情景:当你想要匹配一个qq号,qq号码长度为5-10位,那根据上篇文章的说法,很容易就可以想到该正则:

[0-9]{
   5,10}

这样是可以的,但是当你匹配一个长度大于10的号码时就会出错,这时就会去该字符串的前10个数字出来,如下:

import re
a='1234567890'
r=re.findall('[0-9]{5,10}',a)#明显当查找的字符串长度大于8位时就会出错,只会截取前一部分长度
print(r)

结果

['1234567890']

这样的话你就会得到一个错误的qq号码。

这时就需要引入边界匹配了:

  • ^:这个是从左边开始匹配,规定左边的首个字符
  • $:这个是从右边开始匹配,规定右边的首个字母

现在再写个匹配qq号码的正则:

r=re.findall('^[0-9]{5,10}$',a)#这个表示从左边起为5-10的数字长度,右边也是一样
print('第一个匹配结果:',r)
a = '1234567890'
r=re.findall('^[0-9]{5,10}$',a)
print('第二个匹配结果:',r)

结果

第一个匹配结果: []
第二个匹配结果: ['1234567890']

这样就可以匹配到了,是不是很神奇?


:前面我们有用 [ ] 来匹配,中括号里面表示的是或关系,而这里的组表示的是并关系,并且用小括号括起来 ( )
比如:重复 python 字样三次

import re
a='pythonpythonpythonjakjpythonpythonsdjjpythonpythonpythonsd'
r=re.findall('(python){3}',a)
print(r)

结果

['python', 'python']

这里的结果不是返回三个python,而是返回这个组,当符合一次就会将此组添加到返回列表中一次。

这个组还挺好用的,再看下这个需求:获取下列英文中的life和python之间的内容。

a='life is short,i use python'
r=re.findall('life(.*)python',a,re.S)
print(r) # 这样获取的就是组内的内容

结果

[' is short,i use ']<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值