python学习 day16 (3月21日)----(正则)

背景:(对程序的伤害)  
#__author : 'liuyang' 
#date : 2019/3/21 0021 上午 10:34
#模块和功能之间的关系
#先有的功能

#正则表达式
#time模块 是用来操作时间的
#re 模块 是用来操作正则表达式的

#什么是‘正则’?
#能做什么事?

#在注册 页输入的内容 是否合法?
    #不检测也 , 不合法(不存在手机号)  ,发不出去


#send_msg('msg',1345433191)  #发过去  每次都发 占资源 对程序非常大的伤害
#一秒点 500下 ,每次都发 太伤害 应用
#所以检测

#11位 ,1 开头 ,全数字, 13,14,15,16,17,18,19
#从一个大文件中 将多有的手机号码都取出来

# 正则表达式
    #字符串的规则
    #给字符串定义一个规则来 帮助我们:
        #1 .检测某一段字符串 是否符合规则
        #2. 从一大段 文字中将符合规则的匹配出来
            #爬虫
# 只和字符串相关

#规则
#元字符
#量词
#简单的字符串的筛选和匹配
View Code

正则表达式的应用:   网站(http://tool.chinaz.com/regex)

# 场景一 :检测某一段字符串是否符合规则
# 场景二 :从某一段文字中找到符合规则的内容

一元字符:字符组与非字符组

字符组[]描述的是一个字符位置上的内容规则
#[012345]
#[0-5]
#[0-9]
#[9-0]   不能从大到小 来规定范围
#字符组内所有的范围都是根据ascii 码匹配  一
# 个字符组代表一个位置 多个多个位置

非字符组 [^123]
#^hello  能匹配到整行的开始  第一个位置
# hello$  结束符

一些规则:

#【0-9】==  \d  只能匹配 0-9  匹配任意一个数字 digit
#【A-Z0-9a-z_】\w  字母数字下划线

# \n 匹配回车 换行
# \t  匹配制表符 table
# 空格 本身匹配 空格
# \s  匹配所有的制表符
# 规则+\b  匹配一个单词的边界

# 反义词
#\W  除了字母数字下划线之外的
#\D  除了数字之外的所有
#\S  除了空白之外的所有

#. 匹配换行符 之外的 所有字符

#\d \w \s (\n \t)
#\D \W  \S

# 匹配所有:[\D\d] [\W\w][\S\s]

开始和结束    分组和或

^hello$
# ^hello....$   这样的话  可以后面的有 4个
#a^hello  hello$b    错误用法✖
# ^永远在一个规则的最前面  ^和$  规定了这个字符串的长度
#^\d\d\d\d\d\d\d\d\d\d\d$

分组和 或
#| 表示 或   123|456 两边的都匹配一条结果
# www.baidu.com # www\.oldboy\.com  # 转移一下  否则@也可以被匹配到
# www.(baidu|oldboy).com
#元字符总结
# \d 数字 \w 字符数字下划线 \s 空 \n换行 \t table 
# 与上相反:\D      \W        \S   (\b  匹配一个单词的结尾)
# [] , [^]  #字符组 或非字符组  
#^ $    #开始 结束       弄上结束符 便只检测一个了
#|      # 或永远把相对长的规则放在左侧 先匹配
#()    分组
# .    除了换行符
二.量词

\d{n} 表示出现n次
{n,} 表示至少出现n次
{n,m} 表示出现n-m次
? 表示匹配 0 次 或 1+ 表示匹配 1 次 或 多 次
* 表示匹配 0 次 或 多 次          ? + + = *
元字符  量词
匹配一个字符的内容 表示匹配的数量

# 匹配整数
# [1-9]\d* 可以匹配一次和多次 |0  在加上0
#  01111什么的排除

# 匹配小数   +的意义 小数点前面 有1位
# \d+\.\d+

# 匹配一个整数或者小数
# \d+\.\d+|([1-9]\d*|0)
#\d+\.?\d*          #\d + #必须有整数 \.?#可以存在可不 \d * 必须有
# \d+(\.\d*)?       # 分组 要不不出现 或者都出现
# ^ $
# 海.
# ^海
# ^海.$ 只能匹配两个
# 海$

# 在量词范围内尽可能多的匹配 ---贪婪匹配
# 李.{1,3}李姐和李大打得大和李三
# 李姐和李
# 李三
# [\d] [\d]+ 123dada1 4 和 2
匹配身份证号码

# 15 位  首位不能为0
# 18位 首位 不能为0 末尾可能是x 和 数字
# ^[1-9]\d{14}$
# (^[1-9]\d{16}(x|\d)$)
# 合起来
# ^([1-9]\d{16}(x|\d)|[1-9]\d{14})$
# ^[1-9]\d{14}(\d{2}[\dx])?$

三.转义

# \\\\n
# s = '\\n'

#转义
#在测试的网页上写的是什么  就直接复制过来
#然后在字符串 外面加上一个r
# r'\\n' --> r'\n'

# t't'
# \t  \本身具有转义作用   相当于改变了本来面目
# \\  \ 本身具有转义作用 相当于转义了 转义的特殊作用
# 特殊字符的 才会匹配  \n \t

惰性匹配

# 惰性匹配
#x需要我们自己设置的,尽可能少的匹配
# a.* 以a开头任意一个字符串 都可以被匹配出来
# a.*?  非贪婪 尽可能少取
# 直接a等于 上
#a.*?x      遇到第一个 x 就停止 a-x
两种算法 小原理:
   贪婪:
#      #回溯算法  a.*x  很开心  匹配到最后了  勤快
#      #回溯到 倒数第一个  x 停止了  贪婪匹配 为了简单 也不勤苦
#
   惰性:
#      #匹配到第一个a 之后的每一个 值 判断是不是 x 问问.*   是的话就停止

总结:

   #正则表达式 :(java, c ,python) 都可以用没有关系和py
        #检测字符串是否符合规则
        #从一大串文字中找到符合规则的
    #元字符
        # 。。。
    #量词
        # 。。。
    #转义符
        #\n  换行
        #\\n  \n
        #r'\\n'  \n
    #惰性特点    量词?x  少匹配
    #贪婪匹配    元字符量词

作业:

# 1.hashilib 模块  写函数 检验两个文件是否内容相同
    #如果这两个文件很大(可能生成器)
#2 . hashlib 做一个密文存储密码的注册 登录程序
#3 . 拼手气发红包  发多少钱 多少个 随机数
    #200 50  150  第二个人为0
    #每一个取多少钱 概率是相同的
#4 os 模块 (9期师兄面试原题)(可能递归)
    #1.这个文件夹里都是文件
    #2.这个文件夹里很多文件夹
    # 考文件夹的总大小
#5.计算当前月的1号的时间戳时间

 

posted @ 2019-03-21 11:41  learnacode  阅读(129)  评论(0编辑  收藏  举报