一 正则表达式
说明:正则表达式 提供了一种模糊匹配的操作
1.[] #原子表
[a] #匹配一个字母a
[A] #匹配一个大写字母的A
[aA] #匹配大小写字母a
[abcd] #匹配abcd中的任意一位字母
[a-z] #匹配任意一位小写字母
[a-zA-Z]#匹配任意一位字母
2.^ 以...作为开头 如果放在[] 里 叫做取反
^[0-9] #以数字作为开头
[^0-9] #匹配除了 数字以外的任意字符
^[0-9a-zA-Z] #以数字字母作为开头
3.$ 以...作为结尾 \Z
[0-9]$ 以数字作为结尾
[3a]$ 以数字3或者字母a作为结尾
4. ^$组合来用 因为组合来用 才能够真正的去限制 我匹配内容的长度 \A
^[1][3-8][0-9]{9}$ 匹配手机号
5.{m} 表示前面的数量m个
[9]{3}
9{3}
[a-zA-Z]{4}
[a-zA-Z0-9_]{4}
注意:不能够进行单独使用
6.{m,n} 表示前面的数量m-n个
[9]{1,3}
9{1,3}
[a-zA-Z]{2,4}
[a-zA-Z0-9_]{2,4}
[1-9][0-9]{5,10}
注意:不能够进行单独使用
7.{m,} 表示前面的数量至少m个
[a-z]{1,} #匹配至少一位字母
[a-zA-z]{2,} #匹配至少俩位字母
8.? 可有可无
-?[1-9] #匹配一位1-9的整数
[1-9][0-9]? #匹配1-99的数字
[1-9][0-9]{0,}
9.* 匹配次数的任意次 等同于{0,}
[0-9]* #匹配任意位的数字
10.. 匹配换行符以外的任意字符 \r\n
.* #匹配换行符以外的任意字符任意次 常用的组合 贪婪模式
.*? #匹配换行符以外的任意字符任意次 常用的组合 拒绝贪婪模式
11.+ 匹配次数的至少1次 等同于{1,}
[0-9]+ #至少匹配一位数字
.+ #匹配换行符以外的任意字符至少1次 常用的组合 贪婪模式
.+? #匹配换行符以外的任意字符至少1次 常用的组合 拒绝贪婪模式
12.() 1.代表一个单元 2.子存储
13.| 或
(a|z) 匹配a或z
[az]
14.特殊意义的字符
\d 0-9
\D 取反 [^0-9]
\w [a-zA-Z0-9_]
\W 取反 [^a-zA-Z0-9_]
\s 匹配空白字符
\S 匹配非空白字符
正则表达式的函数
需要导入 re 正则模块
(1) re.findall(patt,str,flag)
- patt 正则表达式
- str 匹配的字符串
- flag 修正符(可选参数)
注意:匹配所有
匹配成功:返回 列表包含内容
匹配失败:返回空列表
(2) re.match(patt,str,flag)
- patt 正则表达式
- str 匹配的字符串
- flag 修正符(可选参数)
匹配成功:返回 对象
- 取值
- group() 方法 进行取值
匹配失败:返回None
注意:
- 正则匹配的内容 必须为起始位置 也就是必须为第一位 否则返回None 匹配失败
- 只匹配一次
(3) re.search(patt,str,flag) 匹配 不分位置 匹配一次
- patt 正则表达式
- str 匹配的字符串
- flag 修正符(可选参数)
(4) re.finditer(patt,str,flag) 以迭代器的形式返回 匹配多次
- patt 正则表达式
- str 匹配的字符串
- flag 修正符(可选参数)
(5) re.sub/subn 正则的替换 一个返回匹配的次数/不反回替换次数
- patt 正则表达式
- old 匹配的字符串
- new 替换成新的
- times 替换的次数
- flag 修正符(可选参数)
#用到了括号的子存储 通过\\1-\\n进行取值 \\1-\\n的顺序 就是你()的顺序
myStr = "2017/10/1" #10-1-2017
res = re.sub("([0-9]{4})/([0-9]{2})/([0-9])","\\2-\\3-\\1",myStr)
(6) re.split() 正则的拆分
myStr = "asdasd&asd*asd@asd"
#通过特殊字符 对其进行拆分 成列表
# res = re.split("[^a-z]",myStr)
# print(res)
正则表达式的修正符
re.I 不区分大小写
re.M 多行模式 对 ^ 和 $有影响
re.S 改变.的行为 使它可以匹配换行符
(7) compile(正则,修正符) 将正则和数据进行分离 使正则对象 可以多次使用
使用:pattern = re.compile(正则,修正符)
pattern.函数名(数据)
修正符
re.IGNORECASE 不区分大小写
re.MULTILINE 多行模式 对 ^ 和 $有影响
re.DOTALL 改变.的行为 使它可以匹配换行符
二 数据的读取
from urllib import request 模块
import urllib.request
(1)通过urlopen的方法 打开 当前的url地址
request.urlopen(url)
(2) 通过打开url地址返回的对象 进行操作
read() 读取全部
readline() 读取一行
readlines() 读取全部 以列表返回
getcode() 获取状态码
geturl() 获取当前访问的url地址
(3) 设置请求超时
request.urlopen(url,timeout=秒数)
(4) url地址的转换
request.quote(newPath)
request.unquote(path)
(5) 模拟浏览器请求
res = request.Request(path,header=”请求头”) #{“User-Agent”:”“}
request.urlopen(res)