目录
一.基础匹配
1.什么是正则表达式
re模块三个基础方法
re.match(匹配规则,被匹配字符串)
search(匹配规则,被匹配字符串)
findall(匹配规则,被匹配字符串)
小结
二.元字符匹配
单字符匹配:
示例:
数量匹配
边界匹配
分组匹配
案例
1.匹配账号,只能由字母和数字组成,长度限制6到10位
2.匹配QQ号,要求纯数字,长度5-11,第一位不为0
3.匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址
小结
正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。
简单来说,正则表达式就是使用:字符串定义规则,并通过规则去验证字符串是否匹配。
比如,验证一个字符串是否是符合条件的电子邮箱地址,只需要配置好正则规则,即可匹配任意邮箱。
比如通过正则规则:(^[\w-]+(L.[\w-]+)*@[ \w-]+(\.[\w-]+)+$))即可匹配一个字符串是否是标准邮箱格式
但如果不使用正则,使用if else来对字符串做判断就非常困难了。
2.re模块的基础使用
正则的三个基础方法
Python正则表达式,使用re模块,并基于re模块中三个基础方法来做正则匹配。分别是:
从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。
演示
import re
s="python hello world"
#match 从头匹配
result=re.match("python",s)
print(result)
print(result.span())
print(result.group())
结果是
match是从第一个开始判断,如果第一个不匹配就直接没有
搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后
1.什么是正则表达式
是一种字符串验证的规则,通过特殊的字符串组合来确立规则
用规则去匹配字符串是否满足
如(^[Iw-]+(L.[w-]+)*@[ \w-]+(L.[\w-]+)+$)可以表示为一个标准邮箱的格式
2.re模块的三个主要方法
在刚刚我们只是进行了基础的字符串匹配,正则最强大的功能在于元字符匹配规则。
字符 | 功能 |
. | 匹配任意一个字符(除了\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位
import re
r='^[0-9a-zA-Z]{6,10}$'
s='sda2423'
print(re.findall(r,s))
结果是
#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这三种邮箱地址
#{内容}.{内容}.{内容}.{内容}.{内容}@{内容}.{内容}.{内容}
import re
r=r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)"
s="[email protected]"
print(re.findall(r,s))
结果是
如果正则表达式里面有()分组,那么findall,会把每个组的结果都列出来,所以,这里用()把整个正则表达式括起来了
1.字符串的r标记表示,字符串内转移字符无效,作为普通字符使用
2.正则表达式的元字符规则