正则表达式看这一篇就够了

 常用方法:

re.match(参数一,参数二)参数一:匹配规则;参二:要匹配的字符串
.span()常用re.match().span()   返回对应的索引值
.group()常用re.match().group()  返回匹配后的字符
re.search(参一,参二)参一:要匹配的对象;参二:字符串
re.findall(参一,参二)参一:要获得的字符:参二:字符串

“匹配三子”的比较:

re.match(参数一,参数二)只能从参数二的开头匹配,返回的是对象,匹配不到返回None

re.search(参一,参二) 默认从左到右开始匹配,返回的是对象,只要找到一个就不在继续

re.findall(参一,参二)  找出所有符合规则的字符,默认从左到右,返回的是列表

示例:

import re
b = '张三天在玩4399小游戏,张三 hello 玩的.很开心'
ress1 = re.match("张三",b)
ress2 = re.search("张三",b)
ress3 = re.findall(r'张三',b)
print(ress1)
print(ress2)
print(ress3)

输出:

<re.Match object; span=(0, 2), match='张三'>
<re.Match object; span=(0, 2), match='张三'>
['张三', '张三']

常用单字符(元字符)如下

.匹配任意一个字符(除\n)
[]匹配[]中列举的字符
\d匹配数字,即0-9
\D匹配非数字
\s匹配空白,即 空格,tab键
\S匹配非空白
\w匹配单字符,即数字、字母、下划线
\W匹配非单字符

[]字符规则:

1.对于[]中的字符会从左到右逐一匹配

import re
b = '张三天在玩4399小游戏,张三 hello 玩的.很开心'
ress1 = re.findall(r'[54]',b)
ress2 = re.findall(r'[543]',b)
print(ress1)
print(ress2)
['4']
['4', '3']

 2.范围,对于[1-9]就相当于\d+

import re
b = '张三天在玩4399小游戏,张三 hello 玩的.很开心'
ress1 = re.findall(r'[1-9]',b)
ress3 = re.search(r'[1-9]',b)
print(ress1)
print(ress3)

 输出:

['4', '3', '9', '9']
<re.Match object; span=(5, 6), match='4'>

代表数量的元字符:

*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有1次
匹配前一个字符出现0次或者1次,即要么有1次,要么没有
{m}匹配前一个字符出现m次
{m,}匹配前一个字符至少出现m次
{m,n}匹配前一个字符出现从m到n次

注:元字符 ?用于改变贪婪模式

分组匹配:

|匹配左右任意一个表达式
()将括号中的字符作为一个分组

那么当使用|时如果左右两端都使用了(),那该如何获取元组内的字符呢,如下 

 m1 = re.match(".+\"(\w+://\w+\.\d{4}\w+\.com?)\".+>(\w+?)<.+|.+\"(\w+://\w+\.\w+\.\w+\.cn?)\".+>(\w+?)<.+", str1)

 获取所有元组内的字符,可以这样写:

m1.group(1,2,3, 4)

尽管|表示一定的or意思,但在分组操作时很特殊,不管有没有|,是第几个元组就用其相应的数字索引即可

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫小烦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值