day17 正则表达式
- 函数的重载,函数名相同但参数不同的函数可以有多个,但python不支持函数的重载
- 运算符重载:通过在类中实现运算符对应的魔法方法,来让类的对象支持相关运算符的操作
- 正则表达式:就做字符串匹配的一种工具,很多语言都支持正则语法,正则语法是通用的;python中通过re模块提供的方法来使用正则
- python正则表达式
- 普通字符:普通字符在正则中代表符号字符本身
- 特殊符号
. 匹配一个任意字符,除了换行符
\w 匹配一个字母/数字/下划线
\s 匹配一个空白字符
\d 匹配一个数字字符
\W 匹配一个非数字非字母非下划线字符
\S 匹配一个非空白字符
\D 匹配一个非数字字符
[] 匹配括号中字符集中的一个字符,[\u4e00-\u9fa5]匹配所有中文
[^] 匹配不是字符集中的任意一个字符
\b 检查单词边界;检查\b所在位置是否是单词边界,不会影响匹配字符串长度;单词边界:字符串开头、字符串结尾、空白符、标点符号等
^ 检查是否是字符串开头,除了放在[]开头,和-放在两个字符之间以外,其他单独的特殊符号,在[]没有特殊功能,都是表示字符本身
* 指定的字符出现0次或多次
+ 指定的字符出现1次或多次
? 指定的字符出现0次或1次
{n} n为正整数,指定的字符出现n次
{n,m} 匹配n~m次指定字符
{n,} 最少n次指定字符
{,m} 最多m次指定字符
- 转义符号:在有特殊功能、意义的符号前加上"\",让这个正则符号变成普通符号
- 分支和分组
| 分支,正则1|正则2,先用正则1匹配,如果匹配失败再用正则2匹配,如果也匹配失败就匹配失败,相当于逻辑或运算
() 分组,将部分正则作为一个整体,用于整体区分或整体操作
- 贪婪模式与非贪婪模式
- 贪婪模式:匹配次数不确定时,尽可能多的匹配
- 非贪婪模式:匹配次数不确定时,尽可能少的匹配(在次数符号后加?,例如*?、+?、??、{n,m}?、{n,}?、{,m}?)
- re模块:
- compile(正则表达式) 创建正则表达式对象
- fullmatch(正则表达式,待匹配字符串) 完全匹配,用于对整个字符串进行检查,比如判断账号密码是否合法;匹配失败返回None,匹配成功返回匹配对象
- match(正则表达式,待匹配字符串) 匹配字符串开头,让正则表达式与字符串开头匹配,
- search(正则表达式,待匹配字符串) 在字符串中找到第一个和正则表达式匹配的子串,匹配成功返回对象,未匹配到就返回None
- 通过匹配对象可获得:匹配结果,可以使用匹配对象.group()来获取匹配结果;匹配范围,匹配结果在原字符串中的范围,使用匹配对象.span(),匹配对象.start(),开始下标;匹配对象.end(),结束下标;匹配对象.group(),获取全部匹配结果;匹配对象.group(1);获取匹配结果第一个分组;匹配对象.string(),获取匹配原字符串
- split(正则表达式,字符串) 将字符串按满足正则表达式的子串进行切割,返回的是列表,列表中是被切割分开的子串,方法中有一个count参数,不传参则全部切割
- sub(正则表达式,新字符串,原字符串) 将原字符串中满足正则表达式的子串替换成新字符串,count参数不传参就全部替换
- findall(正则表达式,字符串) 在字符串中查找所有满足正则表达式的子串存放在列表中返回,使用findall时,如果有分组,无法取到整个正则匹配的结果
- finditer(正则表达式,字符串) 查找所有满足正则表达式的子串,返回一个迭代器,元素是子串对应的每个匹配对象