讲在课前

严格的执行每天的内容

学习的方法

  1. 记笔记 课上记框架
  2. 画思维导图 常用模块 30分钟
  3. 复习 翻笔记 2h
  4. 把课上的例子跟着都敲一遍
  5. 遇到不会的 自己研究5分钟
  6. 还不会 问问同学
  7. 再不会 问问学习好的
  8. 再不会 问老师
  9. 进阶
  10. 把所有的代码都加上注释
  11. 然后把代码删了
  12. 然后跟着注释把代码填上
  13. 写作业 3h
  14. 不会怎么办 就去问
  15. 有些思考题 不要去非得的得出一个答案来
  16. 降维思考
  17. 背默写 -- 睡前做 30min
  18. 写博客 周末 -- 提醒
  19. 把你学习python以来遇到的所有的报错都记录下来
  20. 各种兼职个人原因
  21. 睡眠时间 7个小时

re模块

根据正则规则从一段内容中查找结果

re.findall()

import re
#根据正则规则从一段内容中查找结果
ret= re.findall('\d+','alex123yuan234')
print(ret)

re.search() 只取第一个

ret = re.search('\d+','alex123yuan234')
print(ret)  # 结果对象
print(ret.group())
ret = re.search('\d+','alexyuan')
if ret:
    print(ret.group())

ret = re.match('\d+','123alex')
print(ret.group())
  1. findall 找所有 返回列表
  2. search 找第一个 返回一个结果集,通过.group取值,如果没有匹配到,返回None,.group报错
  3. match 从头开始找第一个,返回一个结果集,通过.group取值,如果没有匹配到,返回None,.group报错
  4. match可以被替代么? 可以
re.search('^\d+','alexyuan') == re.match('\d+','123alex')
#--'alex84'
            pattern, repl, string
ret = re.sub('\d+','sb','alex84wusir73')   # 默认替换所有
ret = re.sub('\d+','sb','alex84wusir73',1) # 写了1表示替换一次
print(ret)

re.subn()

re.subn()
ret = re.subn('\d+','sb','alex84wusir73')
print(ret)  # ('alexsbwusirsb', 2)

re.split()

re.split()
ret = re.split('\d+','alex84wusir73yuan')
print(ret)
ret = 'alex|age|'.split('|')
print(ret)

参数说明

  1. 参数 正则表达式 待匹配的字符串
  2. 替换 正则 要换的结果 待匹配的字符串
  3. re.compile()
  4. re.finditer()

要求把字符串中所有的数字匹配出来

python代码 要编译 要解释 机器码
re.findall('\d+','askjy9374hbvr')
在findall中写了代码,这个代码是否包含去解析\d+
解析的内容编译解释 机器码
re.findall('[\w-.]+@([a-zA-Z\d-]+.)+[a-zA-Z\d]{2,6}','askjy9374hbvr')
对于一个经常被重复使用的正则表达式,我们可以先进行一次编译
之后只要用到这个表达式直接拿出来用就可以了
这样做节省了代码的执行 "时间"

par = re.compile('\d+')
print(par)
ret = par.findall('alex84')
print(ret)
ret = par.search('alex38')
print(ret.group())
finditer
ret = re.findall('\d','alex84alex84alex84alex84alex84alex84alex84alex84'*200)
print(ret)
ret = re.finditer('\d','alex84alex84alex84alex84alex84alex84alex84alex84'*200)
for i in ret:
    print(i.group())

程序员三大职责

  1. 时间
  2. 空间
  3. 用户体验
par = re.compile('\d+')
ret = par.finditer('alex84alex84alex84alex84alex84alex84alex84alex84'*200)
for i in ret:
    print(i.group())
匹配
  # findall
  # search match  返回结果集 .group取值
字符串其他处理
  # 替换呀
  # 切割呀
进阶
  # 空间 finditer 返回一个迭代器,迭代器里装的都是结果集,需要通过group取值
  # 时间 compile 能够提前编译一个正则表达式,当同一个正则需要被多次使用的时候,可以节省时间
正则表达式
<h1>hahaha<\h1>
<h2>wahaha<\h2>
<title>qqxing<\title>

模块的使用

正则表达式
<h1>hahaha<\h1>
<h2>ahaha<\h2>
<title>qqxing<\title>
import re
ret = re.findall('>\w+<',r'<title>qqxing<\title>')
print(ret[0].strip('<>'))

分组在正则表达式中发挥的作用

  1. 分组在findall当中默认会优先被显示出来
  2. 如果不想优先,那么在分组中添加(?:正则规则)表示取消这个规则的优先显示+
import re
ret = re.findall('>(\w+)<',r'<title>qqxing<\title>')
print(ret)  # findall永远优先显示分组中的内容
import re
ret = re.findall('www\.(?:baidu|oldboy)\.com',r'www.baidu.com')
print(ret)
ret = re.findall('\d+(?:\.\d+)?',r'1.23+2.34')
print(ret)

split和分组,会保留被切掉的在分组中内容

import re
ret = re.split('\d(\d)','alex84wusir73')
print(ret)

search和分组

import re
ret = re.search(r'<(\w+)>(\w+)<\\(\w+)>',r'<title>qqxing<\title>')
print(ret.group(0))  # 不受到分组的影响
print(ret.group(1))
print(ret.group(2))
  • 在爬虫\数据清洗的过程中最常用的正则表达式的操作
  • 并不是把我要的内容的正则写出来
  • 而是把整个页面都用正则描述下来,然后把我需要的内容放在分组里
  • 这样就能够取到我想要的内容了

遇见分组

  • findall 优先显示分组中的内容
  • split 保留被切掉的分组内的内容
  • search 可以通过组的索引取值
  • 取消分组的特殊行为(?:正则)

分组命名

import re
ret = re.search(r'<(?P<tab1>\w+)>(?P<content>\w+)<\\(\w+)>',r'<title>qqxing<\title>')
print(ret.group(0))  # 不受到分组的影响
print(ret.group('tab1'))  # 不受到分组的影响
print(ret.group('content'))  # 不受到分组的影响

特殊的需求

#前端语言 html
#<h1>wahaha</h2></h1>
par = '<\w+>.*?</\w+>'
import re
ret = re.search('<(?P<tag>\w+)>.*</(?P=tag)>','<h1>wahaha</h2></h1></h3>')
print(ret.group())

par = '<\w+>.*?</\w+>'
import re
ret = re.search(r'<(\w+)>.*</\1>','<h1>wahaha</h2></h1></h3>')
print(ret.group())

import re
#当我们要匹配的内容混在不想匹配的内容中
#只能把不想要的也匹配出来,然后去掉不想要的就是想要的
ret = re.findall('\d+\.\d+|(\d+)','1-2*(60+(-40.35/5)-(-4*3))')
ret.remove('')
print(ret)

总结

re模块

  • findall search match
  • sub subn split
  • compile finditer
  • 分组和所有的方法之间的特殊现象
  • findall
  • split
  • search

取消分组优先(?:)

  • 正则表达式中的分组命名
  • (?P<组名>)
  • 引用分组(?P=组名)

常见的使用正则解决问题的方式

  • 把整个结构描述下来,对想要的进行分组
  • 把不想要的也匹配出来,然后用手段删掉

应用

  • 用户输入信息的验证-web项目的时候 注册页 登录页
  • 从大段内容中数据的提取-爬虫

2019-03-22-day017-re模块的更多相关文章

  1. [2019.03.22] Linux 学习心得(1)

    本文关键词:shell 判断.grep正则表达式使用和贪婪匹配理解 1. if [ $a -le $b ], 一开始自学的时候我以为 [ ... ] 就是普通的,语法规定的结构,结果其实人家是&quo ...

  2. 2019.03.22 读书笔记 Linq中的IEnumerable与IQueryable

    Linq主要分为 Linq to object .Linq to XML .Linq to sql(现在都用EF了). 针对object和sql,微软分别设计了两套接口IEnumerable.IQue ...

  3. 2019.03.22 读书笔记 var object dynamic

    var:语法糖,在编译时推断出类型,根据反编译可以看出.实际用处是增加代码的健壮性,比如 linq ,匿名对象等. object:很多人容易和var混淆,其实概念上完全不同,没什么可比性. dynam ...

  4. [2019.03.25]Linux中的查找

    TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...

  5. 2019.03.03 - Linux搭建go语言交叉环境

    编译GO 1.6版本以上的需要依赖GO 1.4版本的二进制,并且需要把GOROOT_BOOTSTRAP的路径设置为1.4版本GO的根目录,这样它的bin目录就可以直接使用到1.4版本的GO 搭建go语 ...

  6. Beta冲刺(1/7)——2019.5.22

    所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(1/7)--2019.5.22 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...

  7. GCN代码分析 2019.03.12 22:34:54字数 560阅读 5714 本文主要对GCN源码进行分析。

    GCN代码分析   1 代码结构 . ├── data // 图数据 ├── inits // 初始化的一些公用函数 ├── layers // GCN层的定义 ├── metrics // 评测指标 ...

  8. Yii 框架学习--03 多应用多模块

    本文以YII 2.0.7为例. 概述 首先看看多应用和多模块的特点: 多应用的特点: 独立配置文件 独立域名 多模块的特点: 统一配置文件 统一域名 那么,实际该怎么决定使用多应用还是多模块呢? 对于 ...

  9. Python-爬虫03:urllib.request模块的使用

    目录 1. urllib.request的基本使用 1.1 urlopen 1.2. 用urlopen来获取网络源代码 1.3. urllib.request.Request的使用 2. User-A ...

  10. 03、AngularJs的模块与控制器

    大部分的应用程序都有一个主方法(main)来组织,实例化,启动应用程序.而AngularJs应用是没有主方法的,它是通过模块来声明应用应该如何启动的.同时,模块允许声明来描述应用中依赖关系,以及如何进 ...

随机推荐

  1. 『MXNet』第七弹_多GPU并行程序设计

    资料原文 一.概述思路 假设一台机器上有个GPU.给定需要训练的模型,每个GPU将分别独立维护一份完整的模型参数. 在模型训练的任意一次迭代中,给定一个小批量,我们将该批量中的样本划分成份并分给每个G ...

  2. sql百万级查询优化(转)

    < 数据库技术内幕 > 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进 ...

  3. LINQ 初步了解

    .NET Framework 3.5的新特性 Language Integrated Query,即语言集成查询 查询 和语言结合关系数据库里的信息使用的XML文档保存在本地的DataSet内存中的L ...

  4. Leetcode 1002. 查找常用字符

    1002. 查找常用字符  显示英文描述 我的提交返回竞赛   用户通过次数301 用户尝试次数324 通过次数303 提交次数480 题目难度Easy 给定仅有小写字母组成的字符串数组 A,返回列表 ...

  5. PostgreSQL主备流复制机制

    原文出处 http://mysql.taobao.org/monthly/2015/10/04/ PostgreSQL在9.0之后引入了主备流复制机制,通过流复制,备库不断的从主库同步相应的数据,并在 ...

  6. win10 将本地项目上传到github (第一次+再次上传)

    推荐网址: https://blog.csdn.net/zamamiro/article/details/70172900 https://blog.csdn.net/qq_15800305/arti ...

  7. charles抓包工具使用方法

    注意: 1.软件安装证书,移动端安装证书: 2.设置SSL proxying setting: 3.设置Map Remote: 这里主要是为了设置移动端代理服务器,让其重定向到想要连接的环境上,比如手 ...

  8. jQuery封装 写的的确不错 转载

    扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间.这篇文章将概述jQuery插件开发的基本知识,最佳做法和常见的陷阱. 入门 编写一个jQuery插件开始于给jQuery.fn加入 ...

  9. react router @4 和 vue路由 详解(二)react-router @4用法

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 2.react-router @4用法 a.大概目录      不需要像vue那样麻烦的 ...

  10. 逆袭之旅DAY28.XIA.异常处理

    2018-07-24  14:42:24 第一种: 第二种: 第三种:  执行 try--catch--finally--return(执行return  退出方法) 代码示例: 输入数字,输出对应课 ...