day25
# 正则表达式
# re模块
# re模块本身只是用来操作正则表达式的
# 和正则本身没关系
# 正则表达式 是一种规则 匹配字符串的规则
1.为什么要有正则表达式?
1.1 匹配字符串
一个人的电话号码
一台机器的ip地址
1.2 表单验证
验证用户输入的信息是否准确
11位 全数字 1开头 第二个数3-9之外的数
银行卡号
1.3 爬虫
从网页源码中获取一些链接、重要数据
2.正则规则(元字符,量词)
2.1 第一条规则
本身是哪一个字符,就匹配字符串中的哪一个字符
2.2 第二条规则
字符组[字符1字符2],一个字符组就代表匹配一个字符,只要这个字符出现在字符组里,那么就说明这个字符能匹配上
字符组中还可以使用范围
所有的范围都必须遵循ascii码从下到大来指定
[0-9] [a-z] [A-Z]
[0-9] \d 表示所有的数字
d --> d
\d --> \是转义符 转义符转义了d,让d能够匹配所有0-9之间的数
\w 表示 大小写字母 数字 下划线
\s 表示空白 空格 换行符 制表符
\t 匹配制表符
\n 匹配换行符
\D 表示所有的非数字
\W 表示除 数字字母下划线之外的所有字符
\S 表示非空白
. 表示除了换行符之外的任意内容
[] 字符组 :只要在中括号内的所有字符都是符合规则的字符
[^] 非字符组 :只要在中括号内的所有字符都是不符合规则的字符
^ 表示一个字符的开始
$ 表示一个字符的结束
| 表示或,注意,如果两个规则有重叠部分,总是长的在前面,短的在后面
() 表示分组,给一部分正则规定为一组,|这个符号的作用域就可以缩小了
[\d] [0-9] \d 没有区别 都是要匹配一位数字
[\d\D] [\W\w] [\S\s] 匹配所有一切字符
2.3 元字符
\d \w \s \t(table) \n(next)
\D \W \S
.
[] [^]
^ $
| ()
2.4 量词
{n} 表示只能出现n次
{n,} 表示至少出现n次
{n,m}表示至少出现n次,至多出现m次
? 表示匹配0次或1次 表示可有可无 但是有只能有一个 比如小数点
+ 表示匹配1次或多次
* 表示匹配0次或多次 表示可有可无 但是有可以有多个 比如小数点后n位
匹配0次
匹配任意的2位整数
匹配任意的保留两位小数的数字
匹配一个整数或者小数 \d+.\d+|\d+ \d+.?\d* \d+(.\d+)?
2.5 贪婪匹配和非贪婪匹配
默认贪婪匹配,总是会在符合量词条件的范围内尽量多匹配
\d{7,12}
<html>adljdkjsljdlj</html>
<.+>
非贪婪匹配 :惰性匹配
总是匹配符合条件范围内尽量小的字符串
元字符 量词 ? x
表示按照元字符规则在量词范围内匹配,一旦遇到x就停止
.*?x 匹配任意的内容任意多次遇到x就立即停止
元字符
元字符量词
元字符量词?
\d+?x .*?x 爬虫
身份证号
15位 全数字 首位不为0
18位 前17位全数字 首位不为0 最后一位可能是x和数字
[1-9]\d{14}(\d{2}[\dx])?
元字符
量词
贪婪匹配和非贪婪
尝试自己学习正则模块
基于listdir完成计算文件夹总大小
1.递归