re模块

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

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

正则表达式

  1. 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}
  1. 匹配18/15位的身份证,规则如下:
    15位:1-9 15
    [1-9]\d{14}
    18位:1-9 16 0-9/x
    [1-9]\d{16}[\dx]
    1518位的身份证
    [1-9]\d{16}[\dx]|[1-9]\d{14}

re模块

  1. 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. zookeeper在关闭服务时报could not find file /opt/module/zookeeper-3.5.10/zkData/zookeeper_server.pid

    遇到了个问题,zookeeper在执行 bin/zkServer.sh stop时 会报题目中的错误,我搜了一下博客,好像是因为第一次启动的不是zkServer.sh中的服务 我先 kill -9 加 ...

  2. 更改DBGrid 颜色技巧

    1.根据条件更改某一单元格的颜色 [delphi] view plain copy procedure TMainFrm.First_DGDrawColumnCell(Sender: TObject; ...

  3. Android Studio相关配置说明

    介绍:Android Sdutio 是谷歌推出的一个 Android 集成开发工具. 现已将 SDK(software development kit)集成到 Android Studio 中.可以直 ...

  4. startActivity 新开一个Activity

    private void startActivity(Intent intent) { Context ctx = ApplicationController.getTopActivity(); if ...

  5. 20230130-cf2303复盘

    今天打了TypeDB Forces 2023 (Div. 1 + Div. 2, Rated, Prizes!)这场混合场,我现在是B题稳切但不能快切,C题有机会切,D题无机会的水平,那么这场的复盘B ...

  6. 修复右键批量打印PDF文件的功能

    bat文件内容如下, 直接右键管理员运行即可. @echo off rem "功能描述:修复右键批量打印PDF文件的功能" rem "制作人:赵龙" rem & ...

  7. java hibernate +mysql demo

    origin article:http://www.javatpoint.com/example-to-create-hibernate-application-in-eclipse-ide requ ...

  8. Java项目引入第三方Jar包

    普通java Project 引入jar包: 1,copy jar to lib folder. 2, imported with Build path -> Add external jars ...

  9. 浅谈tcp 与udp

    tcp是一种面向连接的.可靠的.基于字节流的传输层通信协议.是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的,面向字节流. udp(用户数据报协议)是iso参考模型中一种无连接的传输层 ...

  10. No.1.4

    选择器进阶 [复合选择器]:后代选择器:空格    语法:选择器1 选择器2 {css} 子代选择器:>   语法:选择器1>选择器2 {css} [并集选择器]:, 语法:选择器1 , ...