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. ptyhon基础课程_4

    16 循环语句 1.while 语句的格式:"while 条件 :" while True : #循环输出"你好,世界" print ("你好,世界& ...

  2. python 嵌套对象转为dict

    as_dict(self, keys=None, exclude_keys=None): """ 将ORM对象序列化为字典 :param keys: :return: & ...

  3. php 反序列化字符串逃逸

    这里总结一下反序列化字符串逃逸的知识点 反序列化字符串逃逸分为 被过滤后字符增多和字符减少的情况 这里就不讲之前的基础知识了 大家看其它师傅写的博客就可以了 很多师傅的文章写的都很细 现在直接就开始进 ...

  4. unity 2D 物体跟随鼠标旋转 移动

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class FollowMo ...

  5. oracle学习之redo

    Oracle的重做日志基本概念及原理 重做日志文件 redo log file 通常也称为日志文件,它是保证数据库安全和数据库备份与恢复的文件,是数据库安全和恢复的最基本的保障.管理员可以根据日志文集 ...

  6. Oracle View的 WITH READ ONLY 參數有什麼用途?

    限制此視圖只能select,不能進行DML(update,delete,insert)操作,可以保護源表的數據不被改動. CREATE VIEW XXXXX_V AS select XXX,XXX1, ...

  7. 前端项目线上部署记录 | vue-cli

    一.修改公开路径后打包;npm run build 新建一个vue.config.js文件,如果本地打开,则路径为"./',线上则'/',不加'.' module.exports = { p ...

  8. python中的链表推导式

    python中的链表推导式 博客分类: Python Python  num=[1,2,3] myvec=[[x,x*2] for x in num] #嵌套一个链表,格式为一个数和他的平方 prin ...

  9. CSS 属性大全

    css常用标签大全 一.字体属性:(font) 大小 font-size: x-large;(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 font-s ...

  10. Matchmaker Server 像素流送配对服务器