学习笔记之四十一
1、第三方包的应用:除自定义模块、系统模块之外的模块,需要引用的话德线下载,再导入
应用如pillow 专门处理图片的模块
下载方式有两种:
1、(交互式)pip install 第三方模块名
2、pycharm里边setting 设置下载
实例:import requests
response=requests.get('http://www.12306.cn/')
#访问12306网站
print(response.text)
2、正则表达式
定义:
是对字符串操作的一种逻辑公式,用实现定义好的特定字符、及这些特定字符的组合,组成一个"规则字符串",
其称为 正则表达式,正统表示法,正规表达式,常规表达式等,英语regular expression ,简称 re regex等
正则表达式是对字符串(普通字符(a-z之间的字母)和特殊字符(元字符))操作的一种逻辑公式,
作用:给定一个正则表达式和一个字符串,可以达到如下目的:
1)、给定的字符串是否符合正则表达式的过滤原则(称作 匹配)
2)、可以通过正则表达式,我们获取字符串中想要的部分
特点:
1)、灵活性、逻辑性和功能性非常强;
2)、可以迅速的用极简单的方式达到对字符串的复杂控制;
应用环境举例:
1)、如何判断一个字符串为手机号呢?
2)、如何判断邮箱为163或126的所有邮件地址?3)、提取一长串字符串中的部分(切片索引很复杂不好处理时)?
例1:
import re
msg='佟丽娅呵护思考就能看'
pattern=re.compile('佟丽娅')
result=pattern.match(msg)print(result)
#若匹配不到,返回 None,匹配到则返回 span=(正则式的起始下标)
match='匹配到的内容'
例如:<_sre.SRE_Match object,span=(x,x),match='佟丽娅'>
例二:使用正则re模块方法:
match#只从开头开始匹配,匹配不成功就返回None
s='佟丽娅呵护思考就能看'result=re.match('佟丽娅',s)
print(result)
search 匹配 #对整个字符串任意位置开始匹配,匹配不成功返回None,
qie匹配到一个OK结果就返回结果停止匹配result=re.search('佟丽娅',s)
print(result)print(result.span()) #返回起始位置下标 ,
例如 (2,4)
print(result.group())
返回匹配到的内容 例如 '佟丽娅'
例三:[] 表示一个范围,
findall 匹配整个字符串,若匹配ok,直至匹配到字符串结尾,
0-9 表示0到9之间的任意数字,a-z a到z之间的任意字符 但是[0-9]或[a-z]只表示一位从字符串
s='dsf2jk3jew4k4kv5sd' 中匹配 k3f e8y 先根据需要匹配到的内容总结处正则表达式 ,
re='[a-z][0-9][a-z]'
msg='dsf2jk3jew4k4kv5sd'
result=re.match('[a-z][0-9][a-z]',msg)
print(result.group())
findall 匹配整个字符串,若匹配ok,直至匹配到字符串结尾,
常用正则符号: 模式可变,下边用[0-9]
举例
‘*’ 将[0-9] 匹配>=0次
‘+’将[0-9] 匹配>=1次
‘?’将[0-9] 匹配0 或1次
‘^’表示从字符串的行首 第一个字符开始匹配
‘$’表示匹配到字符串的最后一个字符
‘.’表示代替除换行符(\n)之外的所有字符
\w 表示任意字符、数字、下划线,但只表示一位 {m,n} 将[0-9}匹配m~n次,即大于≥m次,≤n次
{m,} 匹配≥m次,无上限 {,n} 匹配≤n次,无下限 {m} 匹配m次
{n} 匹配n次
\b 匹配边界 bordor 边界单词
\d 任意数字 digital [0-9]
\s任意空白字符 space 空格
\w 任意字母数字下划线 word [a-z0-9A-Z_]
\大写字母,表示相反意思
[ABC]表示一个范围,字母A 或 B 或C
(word|word|word) 表示word1或2或3
例如:a7a a88aa c999c 中间数字至少一个 大于等于一次 +
msg='afdff66we435ff234sd34fs4df443fs455a'
result=re.findall('[a-z][0-9]+[a-z]',msg)
print(result.group())
注意:将需要匹配的次数表示在该模式后边例如:
qq号码验证,5-11位,开头不能是0,注意,因为是qq号,数字不能多,所以必须匹配到最后一位,所以加$
qq='2342424079'
result=re.match('[1-9][0-9]{4,10}$',msg)
print(result.group())
例如:
用户名可以是字母数字,但不能以数字开头,且用户名长度8位以上 任意字母数字 [0-9a-zA-Z]
username='admin001'
result=re.serach(^'[a-zA-Z][a-z0-9A-Z]{7,}$',username)
#可以简写为 result=re.serach(^'[a-zA-Z]\w{7,}$',username)
print(result)
例如:搜索py文件 首先py 为结尾,所以用\b 表示边界,py前有一个’.’ ,需要用. 代替, .前边有字符 \w,0个 一个两个不等, 数量用* 则正则表达式为 \w*.py\b 又的取消\的转义作用,前边加 r
s= 'a.py ab.text bb.py kk.png uu.py apyb.py .py'
result=re.findall(r'\w*.py\b,s)
print(result)
#返回值存于list中正则式的分组 **|** | 或的意思
例如:匹配1-100之间的数字n='100'
改进版 因为0-99 有两位,100时三位数
result=re.match(r'[1-9]?\d?$|100$'n)
print(result)
输入验证的邮箱 163 126 qq 前边数字5-20位
email='3243431@163.com'
result=re.match(r'\w{5,20}@(163|126|qq)\.(cpm|cn)$,email)
print(result)