引:所有的模块中的所有方法是记不住的,但是哪个模块能做哪些事情是可以记住的;所以关键在于掌握模块用法、掌握常见的方法、其他的应该整理笔记,然后记住
#学习所有的模块经历的两部分
①要操作的模块感念本身(即时间模块,要对时间有了解、操作系统模块,要对操作系统有了解)
②使用模块去操作它
1.正则表达式
#了解了正则表达式,才能去使用re模块
1)什么是正则表达式:一种匹配字符串的规则
2)正则表达式功能
#定制一个规则
①来确认某一个字符串是否符合规则
②从大段的字符串中找到符合规则的内容
#程序领域
①登陆注册页的表单验证
②爬虫(把整个网页下载下来,从里面提取一些信息,找到需要的所以的信息,做数据分析)
注:正则表达式是一种独立的语法,和python没有关系
注:正则表达式只能匹配字符串
2.正则表达式语法
1)元字符
补充:字符组[]
字符组:在一个位置上能出现的内容(可理解为一个范围);一个字符组只代表一个字符,表示两个字符可使用2个字符组
例:[12b] 匹配1,2,b三个字符
[0-9] 匹配0-9的数字
[a-z] 匹配a-z的字母
[A-Z] 匹配所有的大写字母
[0-9][A-Z][a-z] 匹配三个字符,第一个为数字,第二个为大写字母,第三个为小写字母,如2Qc
[0-9A-Za-z] 匹配一个字符,可以是数字、大写字母、小写字母
[0-9abc] 匹配一个字符,可以是数字、a、b、c
注:若要在字符组中表示一个范围,必须是按照ASCII码小的-ASCII码大的字符,否则匹配不到,如[A-z]可以匹配,但是[a-Z]就不行;
#元字符(一个元字符也只能匹配一个字符)
①\d 表示匹配一个字符,匹配的是一个数字,等价于[0-9]
②\w 表示匹配一个数字、字母或者下划线,等价于[0-9a-zA-Z_]
③\s 表示匹配任意的空白字符(包括回车、空格、tab、\n、\t)
④\n 匹配回车
⑤\t 匹配制表符
⑥\D 匹配非数字
⑦\W 匹配非数字字母下划线
⑧\S 匹配非空白
[\d\D] [\s\S] [\w\W] 表示匹配所有
⑨\b 匹配一个单词的边界,例h\b 对于hello就无法匹配,因为h之后不是边界
⑩^ 匹配字符串的开始
⑪$ 匹配字符串的结尾
例:^[\d][\d]$ 表示匹配任意两个数字
对于字符串:hello hello hello ,^hello只匹配第一个hello;hello$只匹配最后一个hello;^hello$一个也匹配不到
总结:从头到尾一个一个匹配,匹配到就返回True
⑫ ac|xy 匹配一个字符串,要么匹配ac,要么匹配xy
⑬() 匹配括号内的表达式,也表示一个组
⑭[^。。。] 匹配除了字符组中的字符的所有字符,[^abc]表示匹配除了a、b、c之外的其他字符,同样表示一个字符
⑮. 匹配除了换行符之外的任意字符
2)量词
①* 重复0次或更多次
②+ 重复一次或更多次 \d+ == \d{1,}
③? 重复0次或一次
④{n} 重复n次
⑤{n,} 重复n次或更多次
⑥{n,m} 重复n到m次
\d{3} 表示一个数字重复三次
\d\d{3} 表示第一个为数字,第二个重复出现三次,及匹配4个数字
\d{3,} 表示重复至少三次,会尽量匹配多的(贪婪匹配)
\d{3,5} 表示最少匹配3次,最多匹配5次
\d? 表示匹配0次或者1次
例如:匹配2.3或者23都可以,可写为\d\.?\d 即表示可有可无
匹配2.595或2都可以,可写为\d\.?\d*
李.* 就表示匹配李开头的所有字符
李.+ 表示匹配李开头的所有字符,但是如果只有一个李,匹配不到
记忆顺序:?+ * ;*是?和+的集合
3)特殊的用法
①?
#如果在元字符后面跟一个?表示,匹配0次或一次
#如果在量词后面跟了一个?,表示取消贪婪匹配,变为非贪婪模式(也叫惰性匹配)
例:<abc>dafaffaf<abc> 如果正则写为<.*>就会匹配整个字符出;如果写为<.*?>就只会匹配一个<abc>
#通过<.*>匹配的算法叫做回溯算法,即先从开头匹配到结尾,发现结尾没有>,再往前找
#最常用的为:.*?xx 表示匹配任意字符知道找到一个xx
笔记_练习:https://www.cnblogs.com/Eva-J/articles/7228075.html
例:匹配15或18位的身份证号:
[1-9]\d{16}[0-9X]|[1-9]\d{14} #要把长的放在前面
[1-9]\d{14}(\d{2}[1-9X])? #()?表示括号中的内容可有可无
例:匹配小数或者整数
\d(\.\d+)
总结:正则表达式书写方式
①元字符
②元字符量词 表示贪婪匹配(元字符之后一定是量词,量词只约束前面一个元字符)
③元字符量词? 表示惰性匹配
总结:
1)正则表达式能被所有语言通用,但是在python中和在其他语言中又有其他的区别
2)作用:一种匹配字符串的规则
3)应用:登录注册的表单验证;爬虫、自动化开发、日志分析
4)元字符
①个性化的定制:字符组[] ;非字符组[^]
如下面一组无法描述的一般用这种形式,[1-9]
如一个特殊的元字符无法描述一个字符内出现的内容时,可以将多个元字符放入一个字符组中[\d\s]
②匹配特定内容:\d \D \w \W \s \S \t \n
③. 匹配除了换行符之外的所有字符(爬虫容易用;表单验证时一般不用,即约束用户必须输入某种格式时;)
④^ $ 匹配字符串的开始和结束(在字符串中各占一个字符)
⑤| () 二选一, 分组(正常情况下一个量词只能约束一个元字符,但是通过分组可以,对分组中整个内容做约束)
5)量词
①* 出现0-n次
②+ 出现1-n次
③? 出现0-1次
④{} {n};{n,};{n,m}
6)贪婪匹配:通过回溯算法实现
如果要取消贪婪匹配,实现惰性匹配,可以在量词后加?,即【量词?】,匹配时首先就会先匹配?后面的内容
练习
1)匹配任意长度的正整数
①[1-9][0-9]*
②[1-9]\d*
注:能用元字符表示的都不用字符组表示
2)匹配小数(正小数或负小数)
-?\d+\.\d+
3)匹配整数或者小数
①-?\d+\.?\d* 该方式有缺失,如1. 2. 这种都会被匹配到
②-?\d+\.?\d+ 该方式有缺失,如1 2 这种一个数的都不会被匹配到
②-?\d+(\. \d+)? 正确方式
4)匹配负数
-0\.\d+|-[1-9]+(\.\d+)?
5)匹配qq号
[1-9]\d{4,11}
6)匹配长度为11的电话号码
1[3-9]\d{9}
7)匹配长度为8-10位二点用户密码(包含数字字母下划线)
[\w@?]{8,9}
注:在字符组中,大部分符号会显示其原本意义,^ - 除外
8)匹配验证码:4位数字字母组成的
[\da-zA-Z]{4}
9) 从类似<a>wahaha<\a> <b>banana<\b>
①取出标签<a> <b>
<\w+>
②取出内容,如wahaha
>\w+< 该方式不能完全取出(单靠正则无法取出)
10)1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2)) 从上面算式中匹配出最内层的小括号和其内容,即(-40/5)(9-2*5/3+7/3*99/4*2998+10*568/14)(-4*3)(16-3*2)
①\([\d\.+\-*/]+\)
②\([^()]+\)