re模块

模块和实际工作时间的关系

time模块和时间是什么关系?
re模块和正则表达式的关系?
有了re模块就可以在python语言中操作正则表达式

正则表达式

1:什么是正则表达式?
一套规则---匹配字符串的
2:正则表达式能做什么?
1.检测一个输入的字符串是否合法-------web开发项目 表单验证
用户输入一个内容得时候,我们要提前做检测,能够提高程序的效率并且减轻服务器的压力
2.从一个大文件中找到所有符合规则的内容 ---日志分析\爬虫
能够高效的从一大段文字中快速找到符合规则的内容

3:正则规则
所有的规则中的字符就刚好匹配到字符串中的内容
在正则表达式中能够帮助我们表示匹配的内容得符号都是正则表达式中的元字符
元字符都是表示能匹配那些内容,一个元字符总是表示一个字符位置上的内容
1.字符组 []   描述的是一个位置上能出现的所有可能性
[]   一个中括号只表示一个字符位置
如:匹配a或者b或者c
[0-9] 匹配数字
根据ASCII码表进行范围的比对
[a-zA-Z] 匹配大小写
2.匹配符号
\d -------->[0-9] 表示匹配一位任意的数字
\w -------->[0-9a-zA-Z_] 匹配数字字母下划线
\s --------->表示匹配空白符(空格\tab\enter)
空格 ----->
tab ----->\t
enter回车----->\n
\W ---------->表示匹配非数字字母下划线
\D --------->表示匹配非数字
\S --------->表示匹配非空白符
[\d\D] ----->表示匹配所有
. -------->表示除换行之外的所有
[^\d]   表示匹配非数字
\b表示单词的边界
^ ---------->表示匹配一个字符串的开始
$ ---------->表示匹配一个字符串的结尾
或 a表达式|b表达式
          匹配a表达式或者b表达式中的内容,如果匹配a成功了,不会继续和b匹配,所以,如果两个规则有重叠部分,总是把长的放在前面
      分组 ()
          约束|描述的内容的范围问题
3.量词
{n}   表示匹配n次
{n,} 表示匹配至少n次
{n,m}   表示至少匹配0次或1次
? 表示匹配0次或者1次
+   表示一次或多次
*   表示0次或多次
4.贪婪匹配
在量词范围允许的条件下,尽量多的匹配内容
.*x 表示匹配任意字符 任意多次数 直至遇到最后一个x后才停下来
非贪婪匹配
元字符 量词 ?   表示非贪婪
元字符 ?     元字符匹配0次或1次
.*?x 表示匹配任意字符 任意多次数 但是一旦遇到x就挺下来
5.转义符
原本有特殊意义的字符,到了表达它本身的意义的时候需要转义
有一些特殊意义的内容,放在字符组中,会取消他的特殊意义
[().*?] 所有的内容放在字符组中会取消他的特殊意义
[a\-c] -在字符组中表示范围,如果不希望他表示范围,需要转义,或者放在字符组的最前面或者最后面

相关说明:
  1.为啥要匹配0次
      整数   \d+
      小数   \d+\.\d+
      小数或者整数
              \d+(\.\d+)?
  2. 匹配手机号码
  1[3-9]\d{9}
判断用户输入的内容是否合法,如果用户输入的对就能查到结果,如果输入的不对就不能查到结果
^1[3-9]\d{9}$
从一个大文件中找到所有符合规则的内容
1[3-9]\d{9}
匹配18/15位的身份证,规则如下:
15位:1-9 15
[1-9]\d{14}
18位:1-9 16 0-9/x
[1-9]\d{16}[\dx]
15或18位的身份证
[1-9]\d{16}[\dx]|[1-9]\d{14}

re模块

import re
ret = re.findall("\d+","wrr432ee21r3tg")
print(ret)   #找所有   返回一个列表
ret = re.search("\d+","fefrr32r445ergt56")
print(ret)   #变量
pritn(ret.group())   #只能拿到一个,拿不到就报错
if ret:
print(ret.group())


预习一个现象并且找到答案 ---分组有关系()
#findall 还是按照完整的正则进行匹配,只是显示括号里面的匹配的内容
#取所有符合条件的,优先显示分组中的
ret = re.findall("8(\d)\d","1845dwfer35435")
print(ret)   #4
print(ret)
#search还是按照完整的正则表达式进行匹配,显示也是显示匹配 到的第一个内容,但是我们可以通过给group方法传参数
#变量.group(n)的形式来指定获取n个分组中匹配到内容
ret = re.search("8(\d)(\d)","ewrr2123512343456")
print(ret)
if ret:
print(ret.group())
print(ret.group(1))
print(ret.group(2))

为啥在search中不需要分组优先,而在findall中需要
加上括号是为了对真正需要的内容进行提取

为什么要用分组,以及findall的分组优先到底有什么好处
exp = "3-2*(5+3)"
# a+b或者是a-b并且计算他们的结果
ret = re.search("\d+[+]\d+",exp)
print(ret)
a,b = ret.split("+")
print(int(a)+int(b))

ret = re.search("(\d+)[+](\d+)",exp)
print(int.group(1)+int.group(2))

如果我们要查找的内容在一个复杂的环境中
我们要查的内容并没有一个突出与众不同的特点,甚至会和不需要的杂乱的数据混合在一起
这个时候我们就需要把所有的数据统计出来,然后对所有的数据进行筛选,把我们真正需要的数据对应的正则表达式用()圈起来

ret = re.findall("1(\d)(\d)","133456")
print(ret)
取消分组优先:
ret = re.findall("1(?:\d)(\d)","effed")   #取消分组优先?:



什么是爬虫
通过代码获取到一个网页的源码,要的是源码中嵌入的网页上的内容
import requests
ret = requests.get("https:// www.baidu.com").text()

分组和findall的现象
为什么要分组
把想要的内容放到分组里
如何取消分组优先
如果在写正则的时候由于不得已的原因 导致不要内容也得写在分组里
(?:)取消这个分组的优先显示

re模块相关介绍的更多相关文章

  1. 基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)

    本篇继续<基于Metronic的Bootstrap开发框架--工作流模块功能介绍>,继续介绍基于Metronic的Bootstrap开发框架的工作模块功能,介绍工作流模块中相关业务表单的界 ...

  2. tensorflow中slim模块api介绍

    tensorflow中slim模块api介绍 翻译 2017年08月29日 20:13:35   http://blog.csdn.net/guvcolie/article/details/77686 ...

  3. SONiC项目的发展及其相关介绍(转载)

    SONiC作为一个开源项目,理论上是包含了SAI(switch abstraction interface,交换机抽象接口),SAI是没有开源的,厂商自己完成统一的API,提供给上层sonic用户来调 ...

  4. 转载:Nginx 相关介绍

    转载自:https://www.cnblogs.com/wcwnina/p/8728391.html Nginx 相关介绍(Nginx是什么?能干嘛?)   Nginx的产生 没有听过Nginx?那么 ...

  5. Vue 封装axios(四种请求)及相关介绍(十三)

    Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...

  6. 寒武纪加速平台(MLU200系列) 摸鱼指南(一)--- 基本概念及相关介绍

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  7. ppDelegate的相关介绍

    //  AppDelegate的相关介绍//  IOS笔记 //@interface AppDelegate : UIResponder <UIApplicationDelegate>// ...

  8. 【个人笔记】002-PHP基础-01-PHP快速入门-02-PHP语言相关介绍输

    002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home P ...

  9. Android HttpClient HttpURLConnection相关介绍

    Android HttpClient HttpURLConnection相关介绍 遇到一个问题 在android studio上用HttpClient编写网络访问代码的时候,发现该类无法导入并使用.. ...

  10. Winform开发框架中的内容及文档管理模块功能介绍

    在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInf ...

随机推荐

  1. 关于MYSQL知识点复习

    关于MYSQL关联查询JOIN:   https://www.cnblogs.com/withscorpion/p/9454490.html

  2. PowerShell Regex

    PowerShell默认按每一行遍历去匹配模式 比如"aaa`nbbb"用"a.*b"是匹配不到的 需要用"(?s)a.*b"来匹配 1. ...

  3. Java06 面向对象

    一 什么是面向对象 面向对象编程(Object-Oriented Programming,OOP) 面向对象编程的本质就是:以类的方式组织代码,以对象组织(封装)数据. 三大特性: 封装 继承 多态 ...

  4. Delphi as 和 is 的使用

    as就是把某个类型对象转换为某个指定类型,这样方便使用指定类型中的一些成员. is就是判断某个对象是不是某个类型,可以筛选出我们需要的对象. 下面是一个as is 的实例代码,该代码同时也实现了两种方 ...

  5. JAVA常用类(一)Syatem类

    System类:系统类,主要用于获取系统的属性和方法,没有构造方法,其属性都是静态属性,方法都是静态方法 .System类是jdk提供的一个工具类,有final修饰,不可继承,由名字可以看出来,其中的 ...

  6. vscode 远程连接 linux 远程开发

    1. 安装拓展 remote-ssh 2. 设置云主机 git 控制台使用命令 ssh-keygen # 生成一个 ssh key # 登录远程主机 # ssh ubuntu@123.123.123. ...

  7. 晓晓---python文件的读写模式的理解

    1. python读取文件模式的自我理解:'r' open for reading (default)----只读模式打开文件,不能写:'w' open for writing, truncating ...

  8. SqlServer的主键和外键

    SqlServer在创建表时要有 完整性约束(主键)和参照性约束(外键) 1.在建表时创建主键 第一种方法: 第二种方法: 联合主键,即2个主键,sid和cid 2.如果表已经存在,需要创建主键 外键

  9. 手机安装APK文件,出现-应用未安装-软件包无效-安装包异常

    在项目的根的gradle.properties文件中添加 android.injected.testOnly=false 即可. 猜想:因为是在打debug包,然后这个属性变为了true?然后手机会因 ...

  10. 攻防世界-unseping(序列化,Bash shell)

    这是一道序列化的题目,结合了Linux Bash shell知识 一.基础知识点 序列化    序列化的概念:    序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式 ...