引:所有的模块中的所有方法是记不住的,但是哪个模块能做哪些事情是可以记住的;所以关键在于掌握模块用法、掌握常见的方法、其他的应该整理笔记,然后记住

#学习所有的模块经历的两部分

       ①要操作的模块感念本身(即时间模块,要对时间有了解、操作系统模块,要对操作系统有了解)

       ②使用模块去操作它

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\.+\-*/]+\)

②\([^()]+\)