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. 从一大段 文字中将符合规则的匹配出来
#爬虫
# 只和字符串相关 #规则
#元字符
#量词
#简单的字符串的筛选和匹配
正则表达式的应用: 网站(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号的时间戳时间
python学习 day16 (3月21日)----(正则)的更多相关文章
- Python 学习日志9月21日
9月21日 周四 今天是个特殊的日子吗,总感觉9月21这个日子听着怪怪的. 今天早晨看<Head First HTML and CSS>第13章节“表格和更多列表”,内容不多,看完并做了详 ...
- Python 学习日志9月20日
9月20日 周三 多大年龄了,还活得像个小孩.——急什么,人生又不长. 你习惯了思考宇宙星辰,一百年真的不长,一生也就不那么长,许多人的价值观念你也就无法理解.同样,许多人也无法理解你的价值观念,感兴 ...
- Python 学习日志9月19日
9月19日 周二 今天是普通的一天,昨天也是普通的一天,刚才我差点忘记写日志,突然想起来有个事情没做,回来写. 今天早晨学习<Head First HTML and CSS>第十一章节“布 ...
- Python学习日志9月17日 一周总结
周一,9月11日 这天写的是过去一周的周总结,我从中找出当天的内容. 这天早晨给电脑折腾装机,早晨基本上没有学习,休息了一个早晨. 下午写的上周总结,完事做mooc爬虫课的作业,<Think P ...
- Python学习日志9月13日
昨天的学习日志没有写,乱忙了一整天,政治电脑. 好奇心重,想要给电脑装上传说中LInux操作系统,各种小问题折腾到半夜,今天又折腾到晚上才真正的装上系统. 可是装上系统后又发现各种的不好用.虽然界面比 ...
- Python学习日志9月16日
刚才我差点睡着了,差资料的时候太费神,有些累. 今天早晨学习了<head first HTML and CSS>,今天把昨天没看了的关于字体和颜色的一章节看完了,真长.我详细的做了笔记,并 ...
- python学习 day19 (3月26日)----(对象组合)
深谙:非常透彻地了解:熟悉内中情形.谙,读作‘ān’ 熟悉. 1.面向对象作用:规划了代码中的函数处理的是哪一类问题 解决了传参的问题 方便扩展 方便重用 2.类的定义和使用类当中有哪些成员 ''' ...
- Python学习日志9月15日
一周就要过去了,而我跟一周以前没什么区别.回想一下,我这周做了什么事情呢.恍然若失.这周的精力都浪费在很多不必要的事情上了.学过一片古文,讲后羿学射箭,他有一个同学跟他一样聪明,在一起学习.后羿呢,专 ...
- Python学习日志9月14日
今天早晨又没有专心致志的学习,我感觉我可能是累了,需要减轻学习的程度来调整一下咯.这几天装电脑弄的昏天暗地的,身体有点吃不消了.时间真是神奇的魔法,这半个月来,每隔几天都有想要改变策略的想法.今天早晨 ...
随机推荐
- WOPI的安装文档方法
Office Web Apps安装部署 系统要求为Windows Server 2012, 注意:安装Office Web Apps的服务器除了Office Web Apps之外,不能安装其他应用.包 ...
- 善于利用python中的os模块
作为一个程序猿,平时善于利用python中的os模块进行路径等操作,会省去很多麻烦,下面总结一下我平时经常用到的方法: import os os.getcwd() # 获取当前文件所在的目录 os.p ...
- Codeforces Beta Round #67 (Div. 2)
Codeforces Beta Round #67 (Div. 2) http://codeforces.com/contest/75 A #include<bits/stdc++.h> ...
- synchronized细节问题(二)
使用synchronized声明的方法在某些情况下是有弊端的,比如A线程调用同步的方法执行一个很长时间的任务,那么B线程就必须等待比较长的时间才能执行,这样的情况下,可以使用synchronized代 ...
- php cli命令 自定义参数传递
所有的PHP发行版,不论是编译自源代码的版本还是预创建的版本,都在默认情况下带有一个PHP可执行文件.这个可执行文件可以被用来运行命令行的PHP程序.要在你的系统上找到这个可执行文件,就要遵照下面的步 ...
- TZOJ 5291 游戏之合成(快速幂快速乘)
描述 zzx和city在玩一款小游戏的时候,游戏中有一个宝石合成的功能,需要m个宝石才可以合成下一级的宝石(例如需要m个1级宝石才能合成2级宝石). 这时候zzx问city说“我要合成A级宝石需要多少 ...
- c#: 判断Firefox是否安装
1.源起: KV项目需要给浏览器安装下载插件,就需要判断是否安装对应浏览器,发现判断卸载目录方法,32位程序在.net 2.0运行环境下,常规方法不能访问64位注册表位置,导致不能判断. 2.卸载键值 ...
- 【linux C】C语言中常用的几个函数的总结【一】
1.memset函数 定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”.每种类型的变量都有各自的 ...
- crm作业知识点集合[一]
知识点1 1.当我们通过model建立一对多或者多对多的关系的时候,默认情况下,会关联所有的字段,如果我们使用djanog的forms的话,可以加一个属性,限制我这个字段只关联哪些字段,就是用下面的写 ...
- java 线程Thread 技术--1.5Lock 与condition 演示生产者与消费模式
在jdk 1.5 后,Java 引入了lock 锁来替代synchronized ,在使用中,lock锁的使用更加灵活,提供了灵活的 api ,不像传统的synchronized ,一旦进入synch ...