python正则表达式

python正则表达式

基于re模块
import re
正则表达式比较复杂也很实用,下面是正则表达经常用的一些方法

match方法

  • re.match(匹配规则,被匹配字符串)

从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。

s ='python itheima python itheima python itheima'
result re.match('python',s)
print(result)				#<re.Match object;span=(0,6),match='python'>
print(result.span())		#(0,6)
print(result.group())		#python

S='1pythor itheima python itheima python itheima'
result = re.match('python',s)
print(result)			#None

search方法

  • re.search(匹配规则,被匹配字符串)

搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后;若找不到则返回None

s='1pythonni33ni'
result=re.search('python',s)
print(result.span())		#(1,7)
print(result.group())		#python

s='hello,world'
result=re.search('python',s)
print(result.group())		#None

findall()方法

  • re.findall(匹配规则,被匹配字符串)

匹配整个字符串,找出全部匹配项,返回一个列表;若是没有,则返回一个空列表

s='12python66helloworldpython77'
result=re.findall('python',s)
print(result.group())			#['python',python]

result1=re.findall('nihao',s)
print(result1.group())			#[]

单字符匹配

字符功能
.匹配任意1个字符(除了\n), \. 匹配点本身
[]匹配[]中列举的字符
[^]匹配除了[]中列举的字符
\d匹配数字,即0-9
\D匹配非数字
\s匹配空白,即空格、tab键
\S匹配非空白
\w匹配单词字符,即-Z、A-Z、0-9、-
\W匹配非单词字符
s='12#_python66helloworldpython77'

#找出全部数字
result=re.findall(r'\d',s)		#['1','2','6','6','7','7']
#找出全部的英文字母
result1=re.findall(r'[a-zA-Z]',s)
#找出指定的几个
result2=re.findall(r'[paw2]')

数量匹配

字符功能
*匹配前一个规则的字符出现0至无数次
+匹配前一个规则的字符出现1至无数次
?匹配前一个规则的字符出现0次或1次
{m}匹配前一个规则的字符出现m次
{m,}匹配前一个规则的字符出现最少m次
{m,n}匹配前一个规则的字符出现m到n次

边界匹配

字符功能
^匹配字符串开头
$匹配字符串结尾
\b匹配一个单词的边界
\B匹配非单词的边界

分组匹配

字符功能
|匹配左右任意一个表达式
()将括号中字符作为一个分组
#匹配账号,只能由字母和数字组成,长度限制为6到10位
r = '^[0-9a-zA-Z]{6,10}$'		#不可以用\w,因为\w包括_
s='123456ab'
s1='1234567jdngksl'
print(re.findall(r,s))		#['123456ab']
print(re.findall(r,s1))		#[]

#匹配qq号,要求纯数字,长度为5-11位,第一位不为0
r1='[1-9][0-9]{4,10}'
r2='^[1-9][0-9]{4,10}$'
s1='0123456'
s2='1234567'
print(re.findall(r1,s1))		#['123456']
print(re.findall(r2.s1))		#[]
print(re.findall(r2,s2))		#['1234567']

贪婪匹配和惰性匹配

字符功能
.*贪婪匹配,尽可能匹配多
.*?惰性匹配,尽可能匹配少
s='玩吃鸡游戏,晚上一起打游戏,干嘛呢,打游戏呢'
r1='玩.*游戏'
r2='玩.*?游戏'
print(re.match(r1,s).group())		#玩吃鸡游戏,晚上一起打游戏,干嘛呢,打游戏
print(re.match(r2,s).group())		#玩c

#这种匹配方式在爬虫解析hmtl中很常用
s1='在干嘛,玩王者游戏,还是吃鸡游戏,一起打游戏吗'
obj1=re.compile(r'嘛,玩(?P<name>.*?)游戏',re.S)
obj2=re.compile(r'嘛,玩(?P<name>.*)游戏',re.S)
result1=obj1.search(s1).group('name')
result2=obj2.search(s1).group('name')
print(result1)						>>>王者
print(result2)						>>>王者游戏,还是吃鸡游戏,一起打
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值