【Python基础篇013】第壹章模块大全之《re模块》

简介: 【Python基础篇013】第壹章模块大全之《re模块》

 目录

💮前言

🍀模块的相关概念

     🌹 1. 什么是模块

     🌹 2. 使用模块的好处

🍀模块的使用

     🌹 1. 自定义模块

💮一、re模块下的基本使用方法

🍀1、findall方法

🍀2、search方法

🍀3、match方法

🍀4、spilt方法

🍀5、sub方法

🍀6、subn方法

🍀7、compile方法

🍀8、finditer方法

🍀9、注意事项

🌹1、findall的优先级查询

🌹2、 split的优先级查询

💮结语


💮前言

🍀模块的相关概念

      🌹 1. 什么是模块

      模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。模块的英文名叫: modules,一个模块中可以包含N个函数,也可以包含类等等。在Python中一个扩展名为.py的文件就是一个模块。

     🌹 2. 使用模块的好处

如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

   随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用

    • 方便其他程序和脚本的导入并使用
    • 避免函数名和变量的冲突
    • 提高代码的可维护性
    • 提高代码的可重用性

    🍀模块的使用

         🌹 1. 自定义模块

          创建一个.py文件,名称尽量不要与Python自带的标准模块名称相同,需要见名知意

    💮一、re模块下的基本使用方法

    要使用re模块前必须要熟悉掌握正则表达式的使用规则,如果不会的话可以看如下博客

    正则表达式的使用方法----->> http://t.csdn.cn/0V8cl

    🍀1、findall方法

    在字符串中找到正则表达式所匹配的所有满足的结果,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

    语法:

    re.findall(pattern, string, flags=0)


    pattern.findall(string[, pos[, endpos]])

    参数:

      • pattern 匹配模式。
      • string 待匹配的字符串。
      • pos 可选参数,指定字符串的起始位置,默认为 0。
      • endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。

      栗子:

      #匹配字符串中的‘X’
      print(re.findall('x','zai_xia_zhou_zhou'))
      #匹配字符串中的‘a’
      print(re.findall('a','zai_xia_zhou_zhou'))
      #匹配字符串中的小写字母且尽可能多的匹配
      print(re.findall('[a-z]+','zai_xia_zhou_zhou'))
      输出结果:
      ['x']
      ['a', 'a']
      ['zai', 'xia', 'zhou', 'zhou']
      image.gif

      🍀2、search方法

      re.search 扫描整个字符串并返回第一个成功的匹配就结束。findall是返回所有成功匹配的,search只返回第一个成功匹配的。

      函数语法:

      re.search(pattern, string, flags=0)

      函数参数说明:

      参数 描述
      pattern 匹配的正则表达式
      string 要匹配的字符串。
      flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

      匹配成功re.search方法返回一个匹配的对象,否则返回None。

      我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

      栗子:

      '''从前往后,找到一个就返回'''
      ret1 = re.search('a','zai_xia_zhou_zhou')
      '''
      返回的变量需要调用group方法才能出结果,
      但如果没有找到就返回None,调用group方法会报错
      '''
      ret2 = re.search('a','zai_xia_zhou_zhou').group()
      print(ret1)
      print(ret2)
      输出结果:
      <re.Match object; span=(1, 2), match='a'>
      a
      image.gif

      🍀3、match方法

      re.match 必须从字符串的第一个位置开始就能够往下匹配到,匹配上的内容必须调用group才能显示,如果不是起始位置匹配成功的话,match()就返回none,调用group会报错

      函数语法

      re.match(pattern, string, flags=0)

      函数参数说明:

      参数 描述
      pattern 匹配的正则表达式
      string 要匹配的字符串。
      flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

      匹配成功re.match方法返回一个匹配的对象,否则返回None。

      我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

      栗子:

      #想要匹配字符串中的i,但是匹配不到
      ret1 = re.match('i','zai_xia_zhou_zhou')
      ret2 = re.match('zai','zai_xia_zhou_zhou')
      print(ret1)
      print(ret2)
      print(ret2.group())
      输出结果:
      None
      <re.Match object; span=(0, 3), match='zai'>
      zai
      image.gif

      🍀4、spilt方法

      split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:

      re.split(pattern, string[, maxsplit=0, flags=0])

      参数:

      参数 描述
      pattern 匹配的正则表达式
      string 要匹配的字符串。
      maxsplit 分割次数,maxsplit=1 分割一次,默认为 0,不限制次数。
      flags

      标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

      栗子:

      #先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
      ret = re.split('[ab]','abcd')
      print(ret)
      输出结果:
      ['', '', 'cd']
      image.gif

      🍀 5、sub方法

      可以使用sub()方法来进行查询和替换,sub方法的格式为:

      格式

      sub(replacement, string[, count=0])

      参数

        • replacement      是被替换成的文本
        • string                 是需要被替换的文本
        • count                 是一个可选参数,指最大被替换的次数
        #将数字替换成'z',参数1表示只替换1个
        ret1 = re.sub('\d','z','1ai_xia_2hou_3hou',1)
        #将数字替换成'z',没有参数默认是全部替换
        ret2 = re.sub('\d','z','1ai_xia_2hou_3hou')
        print(ret1)
        print(ret2)
        输出结果:
        zai_xia_2hou_3hou
        zai_xia_zhou_zhou
        image.gif

        🍀6、subn方法

        subn方法与sub方法类似,只不过subn会将替换的次数和替换后的结果通过元组的形式返回给你。

        栗子:

        import re
        ret1 = re.subn('\d','z','1ai_xia_2hou_3hou',1)
        ret2 = re.subn('\d','z','1ai_xia_2hou_3hou')
        print(ret1)
        print(ret2)
        输出结果:
        ('zai_xia_2hou_3hou', 1)
        ('zai_xia_zhou_zhou', 3)
        image.gif

        🍀7、compile方法

        compile 函数

        compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

        语法格式为:

        re.compile(pattern[, flags])

        参数:

          • pattern : 一个字符串形式的正则表达式
          • flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
            • re.I 忽略大小写
            • re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
            • re.M 多行模式
            • re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)
            • re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
            • re.X 为了增加可读性,忽略空格和' # '后面的注释
              import re
              #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
              obj = re.compile('\d{3}')
              #正则表达式对象调用search,参数为待匹配的字符串
              ret1= obj.search('abc123eeee')
              ret2= obj.search('abc456eeee34dcsf77')
              print(ret1.group())
              print(ret2.group())
              输出结果:
              123
              456
              image.gif

              compile方法的使用场景:

              当一条正则规则需要反反复复的使用且比较长

              🍀8、finditer方法

              和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

              re.finditer(pattern, string, flags=0)

              参数:

              参数 描述
              pattern 匹配的正则表达式
              string 要匹配的字符串。
              flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
              栗子:
              import re
              ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
              print(ret)  # <callable_iterator object at 0x0000024B7330EC70>
              print(next(ret).group())  #查看第一个结果
              print(next(ret).group())  #查看第二个结果
              print([i.group() for i in ret])  #查看剩余的左右结果
              输出结果:
              <callable_iterator object at 0x0000024B7330EC70>
              3
              4
              ['7', '8', '4']
              image.gif

              栗子

              ret = re.finditer('\d', 'ds3sy4784a')  
              for i in ret:
                  print(i)
              ret = re.finditer('\d', 'ds3sy4784a')
              for i in ret:
                  print(i.group())
              输出结果:
              <re.Match object; span=(2, 3), match='3'>
              <re.Match object; span=(5, 6), match='4'>
              <re.Match object; span=(6, 7), match='7'>
              <re.Match object; span=(7, 8), match='8'>
              <re.Match object; span=(8, 9), match='4'>
              3
              4
              7
              8
              4
              image.gif

              🍀9、注意事项

               🌹1、findall的优先级查询

              ret = re.findall('www.(baidu|csdn).com', 'www.csdn.com')
              print(ret)  # 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
              ret = re.findall('www.(?:baidu|csdn).com', 'www.csdn.com')
              print(ret)
              输出结果:
              ['csdn']
              ['www.csdn.com']
              image.gif

               🌹2、 split的优先级查询

              #在匹配部分加上()之后所切出的结果是不同的,
              #没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
              #这个在某些需要保留匹配部分的使用过程是非常重要的。
              ret=re.split("\d+","eva3egon4yuan")
              print(ret) 
              ret=re.split("(\d+)","eva3egon4yuan")
              print(ret) 
              输出结果:
              ['eva', 'egon', 'yuan']
              ['eva', '3', 'egon', '4', 'yuan']

              相关文章
              |
              8天前
              |
              Python
              在Python中,可以使用内置的`re`模块来处理正则表达式
              在Python中,可以使用内置的`re`模块来处理正则表达式
              20 5
              |
              18天前
              |
              Java 程序员 开发者
              Python的gc模块
              Python的gc模块
              |
              21天前
              |
              数据采集 Web App开发 JavaScript
              python-selenium模块详解!!!
              Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
              63 5
              |
              22天前
              |
              Python
              SciPy 教程 之 SciPy 模块列表 13
              SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
              17 1
              |
              23天前
              |
              XML 前端开发 数据格式
              超级详细的python中bs4模块详解
              Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
              53 1
              |
              20天前
              |
              Python
              SciPy 教程 之 SciPy 模块列表 16
              SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
              15 0
              |
              20天前
              |
              JavaScript Python
              SciPy 教程 之 SciPy 模块列表 15
              SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
              15 0
              |
              21天前
              |
              JavaScript Python
              SciPy 教程 之 SciPy 模块列表 15
              SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
              16 0
              |
              22天前
              |
              Python
              SciPy 教程 之 SciPy 模块列表 13
              SciPy 教程之 SciPy 模块列表 13 - 单位类型。常量模块包含多种单位:公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例:`constants.zero_Celsius` 返回 273.15 开尔文,`constants.degree_Fahrenheit` 返回 0.5555555555555556。
              14 0
              |
              23天前
              |
              Python
              SciPy 教程 之 SciPy 模块列表 11
              SciPy教程之SciPy模块列表11:单位类型。常量模块包含公制单位、质量单位、角度换算、时间单位、长度单位、压强单位、体积单位、速度单位、温度单位、能量单位、功率单位、力学单位等。体积单位示例展示了不同体积单位的换算,如升、加仑、流体盎司、桶等。
              18 0