正则表达式
正则表达式是一种可以让一些复杂的字符串问题变得简单的工具。
正则语法(通用)
1.re模块
fullmatch(正则表达式,字符串) :判断字符串是否满足正则表达式描述的规则(完成匹配)
python提供正则表达式的方法:提供一个字符串,字符串内容是一个正则表达式,这个字符串的最前面需要加r
python的正则表达式:r’正则’
js的正则表达式:/正则/
ac的正则表达式:“正则”
2.正则语法内容
包括:匹配类符号、控制次数的符号、分组和分支、检测类符号、阻止转义
匹配类符号
约束字符串中某个位置上的字符式什么样的字符
1.普通符号(字符)
在正则表达式表示符号本身的符号就是普通符号(除了特殊符号以外的都是普通符号)
2.特殊符号
. :匹配任意一个字符
\d:匹配任意一个数字字符
\s:匹配任意一个空白字符(任何可以产生空白效果的符号:空格、\t、\n)
\D:匹配任意一个非数字字符
\S:匹配任意一个非空白字符
[字符集]:匹配字符集中的任意一个字符
[多个普通字符] - [mnab]:匹配m或者n或者a或者b
[\dmn]:匹配任意一个数字或者m或者n
[\d\s]:匹配任意一个数字或者任意空
[1-9]:匹配1到9中任意数字
[0-9]:和\d效果一样
[1-5a-z]:匹配数字1到5或者任意小写字母
[A-Za-z]:匹配任意一个字母
[\u4e00-\u9fa5]:匹配任意一个中文
[\u4e00-\u9fa5wp]:匹配任意一个中文或者w或者p
[^字符集]:匹配不在字符集中的任意一个字符
控制次数的符号
控制次数的符号的用法:匹配类符号次数
*:任意次数(0或者多次)
+:一次或者多次
?:0次或者1次
{}
{N}:N次
{M,N}:M到N次
{M,}:至少N次
{,N}:最多N次
练习 :写一个正则表达式可以匹配任意一个整数
from re import fullmatch
print(fullmatch(r'[+-]?[1-9]\d*','-123'))
贪婪和非贪婪模式
在匹配次数不确定的时候,匹配次数有贪婪和非贪婪两种模式
默认是贪婪模式:*、+、{M,N}、{M,}、{,N}
贪婪模式:如果多种匹配次数都可以匹配成功,最后取最大的次数进行匹配
非贪婪模式:*?、+?、{M,N}?、{M,}?、{,N}?
如果多种匹配次数都可以匹配成功,最后取最小的次数进行匹配
分组和分支
1.分组:()
1)整体操作:将正则的一部分用()括起来表示一个分组,然后整体控制次数
2)重复匹配结果:在正则中用()添加分组,然后在正则中用’\M’来重复它前面第M个分组的匹配结果
3)捕获:findall函数在正则表达式中有分组
2.分支:|
正则1|正则2|正则|…
注意:如果是正则的部分要进行分支选择,需要将部分分支加()
检测类符号
检测类符号:检测符号所在的位置是否符合条件(必须是在匹配成功前提下才检测)
1.单词边界:\b
检测\b所在的位置是否是单词边界。
单词边界:凡是可以将两个单词区分开的符合都是单词边界,比如:字符串开头、字符串结尾、空白字符、标点符号等!
注意:检测类符号不影响字符串长度
2.检测字符串开头:^
3.检测字符串结尾:$
转义字符
1.转义字符
在正则中本身具备特殊功能或者特殊意义的符号前加’\‘,让它的功能消失变成普通符号。
2.[]也可以让独立存在有意义的符号功能消失
+、*、?、.、^、$、|等
注意:^和-在[]中的意义,[]在[]中需要加\
re模块
1.re模块中常用的函数及其功能
fullmatch(正则,字符串):判断整个字符串是否描述正则描述的规则,如果不满足结果是None,满足返回匹配对象
match(正则,字符串):匹配字符串的开头是否符号要求,如果不匹配返回None,否则返回匹配对象
search(正则,字符串):在整个字符串中查找第一个满足正则表达式的子串,如果找不到返回None,否则返回匹配对象
findall(正则,字符串):获取字符串中所有满足正则的子串,返回一个列表(注意分组的问题)
finditer(正则,字符串):获取字符串中所有满足正则的子串,放回一个迭代器,迭代器中的元素是匹配对象
sub(正则,字符串1,字符串2):将字符串2中所有满足正则的子串全部替换成字符串1
split(正则,字符串,次数):将字符串中所有满足正则的子串作为切割点对字符串进行切割