正则表达式和re模块

目录

一.基础匹配

1.什么是正则表达式

re模块三个基础方法

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

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

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

 小结

二.元字符匹配

单字符匹配:

示例:

数量匹配

边界匹配

分组匹配

案例

1.匹配账号,只能由字母和数字组成,长度限制6到10位

 2.匹配QQ号,要求纯数字,长度5-11,第一位不为0

3.匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址

小结


 

一.基础匹配

1.什么是正则表达式

正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。

简单来说,正则表达式就是使用:字符串定义规则,并通过规则去验证字符串是否匹配。
比如,验证一个字符串是否是符合条件的电子邮箱地址,只需要配置好正则规则,即可匹配任意邮箱。
比如通过正则规则:(^[\w-]+(L.[\w-]+)*@[ \w-]+(\.[\w-]+)+$))即可匹配一个字符串是否是标准邮箱格式
但如果不使用正则,使用if else来对字符串做判断就非常困难了。

2.re模块的基础使用

正则的三个基础方法

Python正则表达式,使用re模块,并基于re模块中三个基础方法来做正则匹配。分别是:

  1. match
  2. search
  3. findall

re模块三个基础方法
 

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

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

 演示

import re

s="python hello world"
#match 从头匹配
result=re.match("python",s)
print(result)
print(result.span())
print(result.group())

结果是

 

 match是从第一个开始判断,如果第一个不匹配就直接没有

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

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

 整个字符串都找不到,返回None

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

匹配整个字符串,找出全部匹配项

找不到返回空list: [ ]

 小结

1.什么是正则表达式
是一种字符串验证的规则,通过特殊的字符串组合来确立规则
用规则去匹配字符串是否满足
如(^[Iw-]+(L.[w-]+)*@[ \w-]+(L.[\w-]+)+$)可以表示为一个标准邮箱的格式

2.re模块的三个主要方法

  • re.match,从头开始匹配,匹配第一个命中项
  • re.search,全局匹配,匹配第一个命中项
  • re.findall,全局匹配,匹配全部命中项

二.元字符匹配

在刚刚我们只是进行了基础的字符串匹配,正则最强大的功能在于元字符匹配规则。

单字符匹配:

字符功能
.匹配任意一个字符(除了\n),\.可以匹配点本身
[ ]匹配[  ]中列举的字符
\d匹配数字即0-9
\D匹配非数字
\s匹配空白,即空格、tab键
\S匹配非空白
\w匹配单词字符,即a-z,A-Z,0-9、_
\W匹配非单词字符

 

示例:

字符串s = “itheima1@@python2 !!666 ##fitcast3"

1.找出全部数字:re.findall(r'\d', s)
字符串的r标记,表示当前字符串是原始字符串,即内部的转义字符无效而是普通字符

2.找出特殊字符:
re.findall(r'\w', s)

3.找出全部英文字母:
re.findall(r'[a-zA-Z]',s)
[]内可以写:[a-zA-Z0-9]这三种范围组合或指定单个字符如[aceDFG135]

数量匹配

字符

功能

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

边界匹配

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

分组匹配

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

案例

1.匹配账号,只能由字母和数字组成,长度限制6到10位

#1.匹配账号,只能由字母和数字组成,长度限制6到10位
import re
r='^[0-9a-zA-Z]{6,10}$'
s='sda2423'
print(re.findall(r,s))

结果是

 2.匹配QQ号,要求纯数字,长度5-11,第一位不为0

#2.匹配QQ号,要求纯数字长度5-11,第一位不为0
import re
r='^[1-9][0-9]{4,10}$'
s="21393254"
print(re.findall(r,s))

结果是

3.匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址

#3.匹配邮箱地址,只允许QQ、163、gmail这三种邮箱地址
#{内容}.{内容}.{内容}.{内容}.{内容}@{内容}.{内容}.{内容}
import re
r=r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)"
s="a.b.c.d.g@qq.con.a.c"
print(re.findall(r,s))

结果是

如果正则表达式里面有()分组,那么findall,会把每个组的结果都列出来,所以,这里用()把整个正则表达式括起来了 

小结

1.字符串的r标记表示,字符串内转移字符无效,作为普通字符使用
2.正则表达式的元字符规则








 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阳862

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

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

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

打赏作者

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

抵扣说明:

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

余额充值