环境小硕的转行之路-18-模块以及正则表达式

前言

不知道还有没有人记得我哈,我在转行之路上没有后退过一步!一直没有时间总结,希望能多学一点东西,最近听课有点跟不上了,决定放慢进度好好总结一下。回溯一下以前的姿势。

什么是模块

模块:和某个东西打交道,而这个东西和python没有关系,例如操作系统.python提供了一个功能的集合来专门负责。
模块就实质上就是是功能的集合!!!面向对象为某个事物。

模块的类型:

  1.内置模块(安装python解释器自动安装上)
  2.第三方模块(需要自己安装的模块)
  3.自定义模块(自己写的)

模块的作用

模块就是为我们提供功能的,而且这个操作内容本来就存在了.模块只不过是python提供给我们去操纵这个内容的方法。
在python中操纵时间就要借助time模块,帮助我们在python中计算时间。
random模块:可以让我们在python中操作随机数。
os模块:在python中和操作系统去交流。

模块使用的举例

谁把硬件管理起来的:操作系统,文件在硬盘上存着。
从硬盘上去读文件必须经过操作系统。所以要用到os模块。

正则表达式

什么是正则表达式

re模块:在python中使用正则表达式.
正则表达式是啥?一种独立的规则,独立的语言。 能做什么.表单验证,手机\qq\密码\身份证号\爬虫(从网页的字符串中获得你想要的数据)\日志分析。
要求1:把一个文件中所有的手机号码找出来.(从大量数据中提取你想要的内容)
  1.打开文件
  2.从一大串字符串找出11位数字
要求2:输入手机号,发送验证码.(验证是否符合格式)
  验证手机号是否合法 #判断某个字符串是否完全符合规则。(表单验证,手机\qq\密码\身份证号)爬虫
  用户收到验证码,输入验证码,完成注册。

元字符

和转义字符相关的元字符
1.\w:匹配数字、字母、下划线[0-9a-fA-F]

2.\d: 匹配数字[0-9]

3.\s:匹配所有空白符 space( (直接敲一个空格))、tab(\t)、enter(\n)

4.\W,\D,\S(非数字、字母、下划线,非数字,非空白匹配)

5.\b 表示单词的边界ing\b(匹配以ing为结尾的单词) blingbling(只匹配结尾的ing)

6.^:表示匹配一个字符串的开始 (将一个字符串的开始认为有一个隐藏的东西)

7.$:表示匹配一个字符串的结束 所以11位手机号匹配的是 1\d\d\d\d\d\d\d\d\d\d

8..:表示匹配除换行符以外所有字符

9.|:或 \d|\d\d匹配一位数或两位数(|从左到右依次匹配,符合a规则或者b规则都可以被匹配,若a规则是b规则一部分,且a规则更苛刻,必须把a规则写在前面)。

10.():分组 表示给几个字符加上l量词约束的需求的时候,就给这个量词分在一个组。

量词 用于约束元字符或者分组的字符

1.{n};前面的字符得出现n次

2.{n,}:前面的字符至少得出现n次

3.{n,m}:前面的字符至少出现n-m次

例子:所以11位手机号匹配的是 ^1[3-9]\d{9,}$ {9}只约束\d

特殊字符

1.?:表示匹配量词之前的字符出现0次或者1次。表示这一位数字可有可无。(有的话只能有1个)

2.+:表示匹配量词之前的字符出现1次或多次。

3.*:表示匹配量词之前的字符出现0次或多次。(有的话能有多个)

小结练习题

1.匹配小数:\d.\d

2.匹配整数: \d+

3.匹配小数或整数: \d(.?\d+)?

4.匹配任意非换行符字符任意次直到字符x出现。:.*?X

5.身份证号码是15或18个字符的字符串,如果是15位则全部由数字组成首位不为0;如果是18位则末位是x或0:^[1-9]/d{14}(/d{2}[0-9x])?$

6.李杰和李联营和李二棍子 取出三个人名字:李[^和]*

贪婪匹配和惰性匹配

正则表达式的默认匹配(贪婪)特点:
在允许的范围内,取最长的结果(运用回溯算法,一条道先走到黑,遇到第二个条件回溯,寻找符合条件的地方。)例如/d+8 1645646465132164156987844888aaaaa可以匹配所有数字囊括。在量词后面加?使其变成惰性匹配 (非贪婪匹配)。
惰性匹配:在量词的后面加问号,且在这一组正则之后没有其它匹配需求了则意思为在量词范围内尽量少的匹配,如果还有其它条件,则?的意思为在能匹配的基础上少匹配。

举例:李杰和 
李.??:只匹配李
李.??和:匹配李杰和
一般遇到xx值停止时(例如李杰和的和),才会用到非贪婪匹配模式,很少单独的使用.

转义符

转义符:在正则中有特殊意义的字符,想让它表示它本来的意义,就在这个字符前加上一个斜杠。 
在正则中一些没有特殊意义的字符,加上\,可能会变成有特殊意义的字符. -号在中括号中有特殊的意义,有时候需要转义.

课后作业

1.匹配整数或者小数
a.\d+.d+|\d
b.\d+(.?\d+)

2.匹配年月日日期如:2016-12-31
答:[1-9]\d{0,3}-(1[0-2]{1}|0?[1-9])-(3[01]|[12]\d|0?[1-9]) #(无法匹配2月28号之类的)无逻辑,只有规则.过滤掉99%无用的,只留下1%可能正确的,用py处理。

3.qq号规则
答:[1-9](\d{5,11})

4.11位的电话号码
答:1[3-9]\d{9,11}  

5.长度为8-10位的用户密码:包含数字字母下划线
答:\w{8,10}

6.匹配邮箱地址
a.@之前首位为数字,字母,首位之后可以为数字,字母,-,.,_

b.@之后必须有内容且为数字,字母,-,_,. 但两个.不能挨着

c.最后一个.之后为字母至少2~6位.
答:[0-9a-zA-Z][\w-._]*@[A-Za-z0-9-]+(.[A-Za-z0-9-]+)*.[a-zA-Z]{2,6}

7.匹配验证码:由四位字母或者数字组成的

[a-zA-Z\d]{4}

8.从<a>jijiji</a>中匹配出jijiji #有的时候你要匹配的内容和你不想匹配的内容符合的正则规则是一样的.

9.1*(8+((4+5)*6+(23*3)+(66*7)*7)) 匹配最内层的括号
答:([^()])

10.9+69/7+6659+4812/11 从左到右匹配出第一个乘法或者除法. 
#无法一次性把所有的表达式匹配出来

猜你喜欢

转载自www.cnblogs.com/negu/p/11714579.html