1、re 模块
re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。注意:
1.re模块是python独有的
2.正则表达式所有编程语言都可以使用
3.re模块、正则表达式是对字符串进行操作
因为,re模块中的方法大都借助于正则表达式,故先学习正则表达式。
2、正则表达式
1.正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。
2.正则就是用来描述一类事物的规则。
3.在Python中,它内嵌在Python中,并通过 re 模块实现。
4.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
一、单字符的匹配
1、元字符
元字符 | 匹配内容 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
\b | 匹配一个单词的结尾 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
\W | 匹配非字母或数字或下划线 |
\D | 匹配非数字 |
\S | 匹配非空白符 |
a | b |
() | 匹配括号内的表达式,也表示一个组 |
[…] | 匹配字符组中的字符 |
[^…] | 匹配除了字符组中字符的所有字符 |
使用语法如下:
import re #导入 re 模块
text = 'abc' #正则表达式查询的字符串
ret = re.match('.', text) # 查询text的第一个字符是否符合正则表达式的要求
print(ret.group()) # 打印匹配到的字符
2、组合字符
正则 | 待匹配字符 | 匹配结果 | 说明 |
---|---|---|---|
[0123456789] | 8 | True | 在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和"待匹配字符"相同都视为可以匹配 |
[0123456789] | a | False | 由于字符组中没有"a"字符,所以不能匹配 |
[0-9] | 7 | True | 也可以用"-"表示范围,[0-9]就和[0123456789]是一个意思 |
[a-z] | m | True | 同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示 |
[A-Z] | M | True | [A-Z]就表示所有的大写字母 |
[0-9a-fA-F] | z | True | 可以匹配数字,大小写形式的a~f,用来验证十六进制字符 |
使用语法如下:
import re #导入 re 模块
text = '89abc' #正则表达式查询的字符串
ret = re.match('[0-9]', text) # 查询text的第一个字符是否符合正则表达式的要求
print(ret.group()) # 打印匹配到的字符
二、多字符的匹配
1 、量词
量词 | 用法说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
2、使用方法
1、*:重复零次或更多次
# * 重复零次或更多次
text01 = '1abc'
ret01 = re.match('\w*', text01)
print(ret01.group())
解释:输出结果为 4 个字符(1abc),先用 ‘\w’ 去匹配 text01,如果符合要求则继续匹配下一个字符是否符合 ‘\w’ 的规则,如果第一个都不符合直接返回匹配到 0 个字符,如果后面遇到不符合的直接返回匹配到符合的字符的总数。
2、+:重复一次或更多次
‘+’ 和 ‘*’基本用法是一样的,唯一的区别是,它最少要匹配到一个字符
3、?:重复零次或一次
‘?’ 和 ‘*’的区别是:它只能匹配0个或1个字符
4、{n}:重复n次
‘{n}’ 和 ‘*’的区别是:它只能匹配n个字符,匹配不到就报错
5、{n,}:重复n次或更多次
‘{n,}’ 和 ‘*’的区别是:它只能匹配n个或多个字符,匹配不到n个就报错,返回匹配的最多个数。
6、{n,m}:重复n到m次
‘{n,}’ 和 ‘*’的区别是:它只能匹配n个到m个之间的字符,匹配不到n个就报错,返回匹配的最多个数。
三、四个小案例
1、验证手机号
import re
# 验证手机号:以1开头,第二位是3-9,其余的是0-9
text = input('请输入手机号:')
if len(text) == 11