正则one

正则

什么是正则?

正则就是表达式,用于数据的提取。

re模块的简单使用

在这里插入图片描述
从左到右进行匹配,apple的每一个字母都可以匹配上
即使后面再写很多的东西

在这里插入图片描述
也可以匹配上apple,后面的匹配不上就不管了
在这里插入图片描述
从左到右进行匹配,第一个字母都匹配不上,所以就不会再往下进行匹配

import re
pattert = re.compile('apple')#规则
result = pattert.match('apple17189208888')#里面写很多东西,然后规则来匹配
print(result)



##直接写
result = re.match('apple','apple171788')
#第一个参数表示规则,要匹配的东西
#第二个是规则要去匹配的语句

print(result)

第一个写的好处是,一套规则可以多处使用
第二个便洁

正则之代表字符

.表示可以匹配任意字符(除了\n)

在这里插入图片描述
可以看到只匹配了一个a,(因为从左到右匹配)
如果想全部打印出来的话

在这里插入图片描述
就可以写5个点,可以看到返回了apple
如果直接想看到结果,不想看到这些东西,可以使用group

group表示可以直接取到匹配的值,但是要做判断。

在这里插入图片描述
可以看到返回的只有apple
但是如果匹配不到值的话,是会报错的

在这里插入图片描述
在apple里面找1,肯定是找不到的,这个时候用ggroup,是会报错的,所以最好先判断一下

import re
result = re.match('1','apple')
if result:#如果有返回值的话,再去打印
    print(result)
.匹配不上\n(\n表示换行)

result = re.match('.','\n')
print(result)

显示的结果是
在这里插入图片描述
直接返回的none,如果想匹配\n的话

在这里插入图片描述
直接写上\n规则就好

匹配小数(\转义)

小数点在正则里面是有意义的,所以想要匹配小数,就得用转义,告诉他,这就是一个小数点
\表示转义,在小数点前面加上\就欧克了

在这里插入图片描述

[]表示匹配其中的任意一个字符
[]不管有多少字符,就只能匹配其中的一个

在这里插入图片描述
可以看到返回的结果只有一个1

[]中的.只是一个普通的.,没有任何的意义
[a-z]表示匹配从a到z的 任意一个 字符
[a-z0-9]表示匹配 从a到z或者从0到9的 任意一个 字符
[a-z0-9-]表示匹配从a到z 或者从0到9 或者- 的任意一个字符
[a-z]表示匹配 a - z这三个字符当中的任意一个

** 因为\可以转义 ,加上它之后-就没有了意义**

[[]]表示要匹配 [ ] 中的任意一个
在[]里面的^表示取反的意思,它本身代表以什么开头,如下例子

import re
result = re.match('[^5]','5')
#前面的规则是除了5   后面就只有一个5 
print(result)

结果
在这里插入图片描述
可以看到5是匹配不上的,除了5,任意的一个字符都可以匹配上

re里面的\d(可以匹配一位数字) \D(匹配非数字,一个\D能匹配一个)

在这里插入图片描述
因为\d表示匹配一位数字,\d\d这个规则表示要匹配两位数字,但是后面的句子中只有一位数字,所以返回none

\D表示匹配任意一个不是数字的字符,比如
在这里插入图片描述

\D匹配的数量也是一个 匹配的是非数字

re里面的\s(匹配一个空格和Tab键) \S(匹配非空白,匹配数量也是一个)
re.match('爱\s情','爱 情')表示匹配爱 情

\S只要不是空格就行

re里面的w和W
w匹配字母、数字、下划线,等价于[a-zA-Z0-9_] \w可以匹配汉字(python),
W匹配特殊字符,比如非字母、非数字、非汉字、非_,它可以支持空格、表情等

原始字符串

r可以消除特殊字符的意义
import re
s = '呵\n呵'
result = re.match(r'呵\n呵',s)
print(result)

结果
在这里插入图片描述
\n是换行符,但是前面加上r就没用意义了
再比如

import re
result = re.match(r'.','...')
print(result)

结果
在这里插入图片描述
.在正则里面表示匹配除了\n之外的任意一个字符,但是前面加上r之后,.就没有了意义

r的原理

在这里插入图片描述
*r就相当于在有意义的字符前面加了反义字符*

正则之代表数量

*代表 0次 或者 无数次
import re
result = re.match('\d*','a')
print(result)

虽然\d是匹配数字的,但是*代表0或者无数,所以运行结果不会返回none
在这里插入图片描述
匹配的到是一个’'空字符串

+表示 1次 或者 无数次

在这里插入图片描述

?表示 0次 或者 1次
import re
result = re.match('\d?','123456')
print(result)

结果只能匹配到1
在这里插入图片描述
?表示0和1次,所以


import re
result = re.match('\d?','a')
print(result)

运行结果也是和*一样的
在这里插入图片描述

{n}表示 n次
import re
result = re.match('\d{9}','1234')
print(result)

运行结果
在这里插入图片描述
因为最少要出现9个数字,后面的数字不足9个,所以匹配不上

{n,}表示 最少n次
{n,m}表示 n到m次,注意包括n和m
小练习:匹配一个手机号
import re
result=re.match('1[3456]\d{9}','138357510698756')
print(result)

运行结果
在这里插入图片描述

只匹配汉字

[\u4E00-\u9FA5\s]+ 多个汉字,包括空格
[\u4E00-\u9FA5]+ 多个汉字,不包括空格
[\u4E00-\u9FA5] 一个汉字

参数i表示忽略大小写

参数g

global,全文搜索,默认搜索到第一个结果接停止

代表边界,分组在正则two里面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值