Python攻城师的成长————正则表达式

今日学习目标:

  • 学习运用正则表达式
  • 熟知python内置模块之re模块

今日学习内容:

内容简要:

  • 正则表达式
  • python内置模块之re模块

内容详细:

正则表达式

  • 正则表达式简介

    • 引言
      当你遇到一些字符数据,要对其进行筛查和校验时大概对于刚入行的小白来说就是利用if…else…相互嵌套去逐步对数据进行相应的处理。这样的话就会在老程序员眼里显得过程太臃肿了,此时他就会告诉你去看看正则表达式在来写吧
    • 概念

    正则表达式是一门独立的语言 专门用来匹配、校验、筛查所需的数据,任何编程语言都可以使用

    同理在python中如果想用就必须借助于内置模块re,对于正则表达式的学习听着好像会很难,看一下概念就明白了。它的学习其实就是在学习它独有的语言,就像学习python一样但相比较下还是会简单些的。
    这边推荐一个在线测试网站:http://tool.chinaz.com/regex/

  • 正则表达式特殊符号

    • 匹配单个字符
    字符功能
    .匹配任意1个字符(除了\n)
    [ ]匹配[ ]中列举的字符
    \d匹配数字,即0-9
    \D匹配⾮数字,即不是数字
    \s匹配空⽩,即空格,tab键
    \S匹配⾮空⽩字符
    \w匹配单词字符,即a-z、A-Z、0-9、_
    \W匹配⾮单词字符
    • 特殊符号
    字符功能
    ^匹配字符串开头
    $匹配字符串结尾
    ()将括号中字符作为⼀个分组
    • 举例

    . 的用法
    在这里插入图片描述

    [] 的用法
    在这里插入图片描述
    在这里插入图片描述

    \d、\D 的用法
    在这里插入图片描述
    在这里插入图片描述

    \s、\S 的用法
    在这里插入图片描述
    在这里插入图片描述

    \w、\W 的用法
    在这里插入图片描述
    在这里插入图片描述

    ^ 的用法
    在这里插入图片描述

    $ 的用法
    在这里插入图片描述

    () 的用法
    在这里插入图片描述

  • 正则表达式量词

    • 匹配多个字符
    字符功能
    *匹配前⼀个字符出现0次或者⽆限次,即可有可⽆
    +匹配前⼀个字符出现1次或者⽆限次,即⾄少有1次
    ?匹配前⼀个字符出现1次或者0次,即要么有1次,要么没有
    {m}匹配前⼀个字符出现m次
    {m,n}匹配前⼀个字符出现从m到n次,若省略m,则匹配0到n次,若省略n,则匹配m到无限次
    • 举例

    * 的用法
    在这里插入图片描述

    + 的用法
    在这里插入图片描述

    ? 的用法
    在这里插入图片描述

    {m} 的用法
    在这里插入图片描述

    {m,n} 的用法
    在这里插入图片描述

  • 正则表达式贪婪与非贪婪匹配
    Python⾥数量词默认是贪婪的,总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。
    举个例子:
    当要去在”abbbc”中筛选出‘ab’,利用正则表达式”ab*”,将找到”abbb”。而如果使用非贪婪的数量词”ab*?”,将找到”ab”。
    所以一般情况下使用非贪婪模式来提取。(在"*","?","+","{m,n}"后⾯加上?,使贪婪变成⾮贪婪。)

  • 正则表达式取消转义

    • 问题引入
      正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰。
    • 处理方式
      假如你需要匹配文本中的字符”\”,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\\”:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,Python中字符串前⾯加上 r 表示原⽣字符串。

python内置模块之re模块

  • 引言

    1. 在python中无法直接使用正则 需要借助于模块(1.内置的re模块2.第三方的其他模块)
    2. 有一些模块内置函数在调用时需要连续编写正则表达式,这样的话就可以提前写好后续需要经常使用的正则
      变量名 = re.compile(正则表达式)
      re.函数名(变量名,待匹配的文本)
  • 模块中使用频率较高的函数

    • re.match函数
      语法结构
      re.match(正则表达式,待匹配的文本)
      使用说明
    1. 从字符串的起始位置匹配,如果不是起始位置匹配成功的话,match()就返回None。匹配成功re.match方法返回一个匹配的对象。

    2. 匹配到数据的话,可以使⽤group⽅法来提取数据。以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

    3. group()用来提出分组截获的字符串,()用来分组,group() 同group(0)就是匹配正则表达式整体结果,group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。没有匹配成功的,re.search()返回None。

      举例

      import re
      
      result = re.match("ab","abcdef")
      print(result.group())
      
      '''
      # 执行结果
      ab
      '''
      
    • re.search函数
      语法结构
      re.search(正则表达式,待匹配的文本)
      使用说明

      1. re.search 扫描整个字符串并返回第一个成功的匹配,如果没有匹配,就返回一个 None。

      2. re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配

      举例

      import re
      
      ret = re.search(r"\d+", "阅读次数为9999")
      print(ret.group())
      
      '''
      # 执行结果
      9999
      '''
      
    • re.findall函数
      语法结构
      re.findall(正则表达式,待匹配的文本)
      使用说明
      在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。注意: match 和 search 是匹配一次 findall 匹配所有。

      举例

      import re
      
      ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
      print(ret)
      
      '''
      # 执行结果
      ['9999', '7890', '12345']
      '''
      
    • re.finditer函数
      语法结构
      re.finditer(正则表达式,待匹配的文本)
      使用说明
      和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

      举例

      import re
      
      it = re.finditer(r"\d+", "12a32bc43jf3")
      for match in it:
      	print(match.group())
      
      
      '''
      # 执行结果
      	12
      	32
      	43
      	3
      '''
      

今日学习时间:

这里统计计划学习的时间

1、 上午8:30~12:30
2、 下午2:30~5:30
3、 晚上6:30~9:30


今日学习产出:

这里统计学习计划的总量

  • 1、 技术笔记 1遍
  • 2、CSDN 技术博客 1篇
  • 3、每日录音,预习明日内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值