一,正则表达式
fullmatch(正则表达式,字符串) - 查看字符串和正则表达式是否匹配,如果不匹配结果式None 正则表达式:r'正则语法'
1.什么是正则表达式
正则表达式是处理字符串的工具,通过不同的正则符号来描述字符串的规则
2.正则符号(正则表达式的语法)
1)普通字符:除了在正则中有特殊功能和特殊意义以外的字符都算普通字符
普通字符代码本身
匹配一个字符串有三个字符串。分别是'a','b','c'
- . - 匹配任意一个字符
一个点只能匹配一个字符 - \w - 匹配一个数字,字母或者_(在ASCII码表)
一个\w只能匹配一个字符
4)\d - 匹配任意一个数字字符
匹配一个长度是5的字符串,前面两个字符是任意数字,后面三个是任意字符
5)\s - 匹配任意一个空白字符
空白字符包括:空格字符,换行字符,制表符。。。 - \大写字母
\D - 匹配除了数字字符以外的任意字符(匹配一个非数字字符)
\S - 匹配一个非空白字符 - [字符集] - 匹配字符集出现的任意一个字符
注意:一个[]只能匹配一个字符
a.[多个字符] - 例如:[abc] -匹配'abc'中任意一个字符
b.
[1-9] - 匹配1到9中的任意一个字符(字符编码值递增)
[a-z] - 匹配任意一个小写字母
[A-Z] - 匹配任意一个大写字母
[a-zA-Z] - 匹配任意一个字母
[a-zA-Z\d] - 匹配一个数字,字母
[\t\n] - 匹配任意一个空白符
[\u4e00-\u9fa5] - 匹配任意一个中文字符
匹配一个长度是4的字符串,第一个字符是1或者3或者7,后面是abc
re_str=r'[137]abc'
print(fullmatch(re_str,'1abc')) - [^字符集] - 匹配不在字符集中的任意一个字符
[^abv] - 匹配任意一个不是a,b,c的字符
[^2-8] - 匹配任意一个不是2到8的字符
[^\u4e00-\u9fa5] - 匹配任意一个非中文的字符
3.检查符
所有的检测符号都不会影响字符串的长度
1)\b - 检查是否是单词边界
单词边界 - 能够将两个单词隔开并且不会产生歧义的任意符号:空白字符,标点符号,字符串开头和字符串结尾
匹配规则:先去掉\b对字符串进行匹配,如果匹配成功再检查\b所在的位置是否是单词边界
-
^ - 检查^所在的位置是否是字符串开头
注意:这儿的^是[]外面的
3)[图片上传失败...(image-3d198-1565708705099)]所在的位置是否式字符串结尾
4. 控制次数的符号
1.* - 匹配0次或者多次
2.+ - 匹配1次或者多次
3.? - 匹配0次或1次
4.{}
- {N} - 匹配N次
- {M,N} - 匹配M到N次(至少M次,最多N)
- {M,} - 匹配至少M次,123a{3}:123aaaa
- {,N} - 最多N次
5.贪婪和非贪婪
在匹配次数不确定的时候,会出现贪婪和非贪婪两种情况;默认情况都是贪婪。
什么是贪婪:在能够匹配成功的前提下,匹配次数尽可能的多
什么是非贪婪:在能够匹配成功的前提下,匹配次数尽可能少;(在匹配次数后面加?)
7.分支
- |
正则1|正则2 - 先让正则1去匹配,如果匹配成功就成功;匹配失败再让正则2去匹配
(正则1和正则2中只要有一个能匹配成功就行)
8.分组
1 ( ) - 将括号里面的内容作为一个整体
- 整体操作
r'(\d\d|[A-Z]{2})abc' - 匹配一个字符串后面是abc,前面是两个数字获或者两个大写字母
r'([a-z]\d){3}' - a8n7j8
2)分组
a.分组截取:方便后面分段或者分情况去不同的匹配结果
b.分组重复:在正则中用\X来重复前面第X个分组匹配到的内容
注意:\X的前面必须有这个分组
9.转义符号
1.加
在正则中有特殊功能和特殊意义的符号前加\,让这个符号的特殊功能和意义消失
2.加[]
在[]中有特殊意义的符号:a.^放在最开头 b.-放在两个字符之间
其他符号:. + ? * $,这个单独的符号在[]中都表示这个符号本身
二,re模块
re模块是python提供的,专门针对正则表达式应用的相关函数
1.compile(正则表达式) -> 将正则表达式转换成正则对象
2.字符串匹配
fullmatch(正则表达式,字符串) - 让正则表达式和字符串完全匹配
match(正则表达式,字符串) - 匹配字符串开头
以上两个方法的结果:匹配失败结果式None,匹配成功会返回匹配对象
1)匹配对象
a.获取匹配到的字符串
匹配对象.group() - 获取整个正则表达式匹配到的字符串,结果是字符串
匹配对象.group(N) - 获取整个正则表达式中第N个分组匹配到的字符串
b.获取匹配到的字符串在原字符串中的位置信息
匹配对象.span() - > 返回匹配结果在原字符串中的下边范围:[开始下标,结束下标)
匹配对象.span(N - > 返回第N个分组匹配到的结果在原字符串中的范围
c.获取原字符串
匹配对象.string
3.查找
1)search(正则表达式,字符串) - 在字符串中查找第一个满足正则表达式的字串,如果找到了结果是匹配对象,找不到结果是None
2)findall(正则表达式,字符串) - 获取字符串中所有满足正则表达式的字串;返回值是一个列表
注意:如果正则表达式中有分组,列表中的匹配结果只会去分组匹配到的内容
3)finditer(正则表达式,字符串) - 获取字符串中所有满足正则表达式的子串;返回值是一个迭代器,元素是匹配对象
4.切割
split(正则表达式,字符串) - 将字符串满足正则表达式的子串作为切割点对字符串进行切割;返回一个字符串列表
5.替换
sub(正则表达式,字符串1,字符串2)- 将字符串2中所有满足正则表达式的字串都替换成字符串1,返回新的字符串