阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

正则表达式高级用法

432次阅读
没有评论

共计 2615 个字符,预计需要花费 7 分钟才能阅读完成。

一、正则高级用法

1、分组

  • 概念

    处理简单的判断是否匹配之外,正则表达式还有提取子串的功能,用 () 表示的就是要提取的分组

  • 代码

    import re ret = re.search(r"(?P<phone>(?P<quhao>0\d{2,3})-(\d{7,8}))", "zutuanxue_com's phone is 010-88888888") print(ret) # 组的排序:从外到内,从左到右 print(ret.group(0)) # 组中下标为 0 的表示原数据 print(ret.group("phone")) print(ret.group(1)) print(ret.group("quhao")) # 可以根据组的名字获取组的数据 print(ret.group(2)) print(ret.group(3)) # 查看匹配的各组的数据 print(ret.groups())
  • 说明

    • 正则表达式中定义了组,就可以在 Match 对象上用 group()方法提取出子串来
    • group(0)永远是原始字符串,group(1)、group(2)……表示第 1、2、……个子串

2、编译

  • 概念

    当在 python 中使用正则表达式时,re 模块会做两件事,一件是编译正则表达式,如果表达式的字符串本身不合法,会报错。另一件是用编译好的正则表达式提取匹配字符串

  • 编译优点

    如果一个正则表达式要使用几千遍,每一次都会编译,出于效率的考虑进行正则表达式的编译,就不需要每次都编译了,节省了编译的时间,从而提升效率

  • compile()函数

    • 原型

      def compile(pattern, flags=0)
      
    • 作用

      将 pattern 模式编译成正则对象

    • 参数

      参数 说明
      pattern 匹配的正则表达式(一种字符串的模式)
      flags 标识位,用于控制正则表达式的匹配方式
    • flags

      说明
      re.I 是匹配对大小写不敏感
      re.L 做本地化识别匹配
      re.M 多行匹配,影响到 ^ 和 $
      re.S 使. 匹配包括换行符在内的所有字符
      re.U 根据 Unicode 字符集解析字符,影响 \w、\W、\b、\B
      re.X 通过给予我们功能灵活的格式以便更好的理解正则表达式
    • 返回值

      编译好的正则对象

    • 示例

      import re re_phone = re.compile(r"(0\d{2,3}-\d{7,8})") print(re_phone, type(re_phone))
  • 编译后其他方法的使用

    原型

    def match(self, string, pos=0, endpos=-1)
    def search(self, string, pos=0, endpos=-1)
    def findall(self, string, pos=0, endpos=-1)
    def finditer(self, string, pos=0, endpos=-1)
    

    参数

    参数 说明
    string 待匹配的字符串
    pos 从 string 字符串 pos 下标开始
    endpos 结束下标

    示例

    s1 = "zutuanxue_com's phone is 010-88888888" s2 = "kaige's phone is 010-99999999" ret1 = re_phone.search(s1) print(ret1, ret1.group(1)) ret2 = re_phone.search(s2) print(ret2, ret2.group(1))

3、贪婪匹配

  • 贪婪概念

    匹配尽可能多的字符

    import re print(re.findall(r"(\d+0)", "12340567085465046567"))
  • 非贪婪概念

    尽可能少的匹配称为非贪婪匹配,*?、+? 即可

    import re print(re.findall(r"(\d+?0)", "12340567085465046567"))
  • 常见示例

    /* part1 */ /* part2 */

    import re s = '''/* zutuanxue_com good */ dsdgergaergser /* kaige nice */''' print(re.findall(r"/\* (.*) \*/", s)) print(re.findall(r"/\* (.*?) \*/", s))

二、高级使用

1、字符串切割

  • 早期字符串切割代码

    s1 = "zutuanxue_com is a good man" print(s1.split(" "))
  • 现在的需求

    字符串 ”zutuanxue_com is a good man” 中的单词切割出来(注意字符串中空格个数不定)

  • 正则中的 split()函数

    原型:re.split(pattern, string)

    作用:切割字符串

  • 解决需求

    import re s2 = "zutuanxue_com is a good man" print(re.split(r"\s+", s2))
  • 切割 ”zutuanxue_com#is$a%good&man” 中的单词

    import re s3 = "zutuanxue_com#is$a%good&man" print(re.split(r"[#$%&]", s3))

2、字符串替换

  • 早期字符串替换代码

    s1 = "zutuanxue_com is a good man" s2 = s1.replace("good", "nice") print(s2)
  • 现在的需求

    将字符串 ”zutuanxue_com is a good man!zutuanxue_com is a nice man!zutuanxue_com is a cool man” 中的 ”good”、“nice”、“cool” 都改为 ”handsome”

  • sub 函数与 subn()函数

    • 原型

      def sub(pattern, repl, string, count=0, flags=0)
      def subn(pattern, repl, string, count=0, flags=0)
      
    • 作用

      在目标字符串 string 中查找匹配的 pattern 模式的字符串,再把它们替换成指定 repl 字符串,可以指定最多替换 count 次,否则替换所有

    • 区别

      a、sub 返回一个替代后的字符串

      b、subn 返回一个元组,元组的第一个元素为替换后的字符串,第二个元素为替换的次数

  • 解决需求

    import re s3 = "zutuanxue_com is a good man!zutuanxue_com is a nice man!zutuanxue_com is a cool man" print(re.sub(r"good|nice|cool", "handsome", s3)) print(re.subn(r"good|nice|cool", "handsome", s3))

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计2615字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7796010
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
开源神器组合!1Panel面板+Halo助你轻松打造个人/企业内容中心

开源神器组合!1Panel面板+Halo助你轻松打造个人/企业内容中心

开源神器组合!1Panel 面板 +Halo 助你轻松打造个人 / 企业内容中心 前言 大家好,我是星哥,之前...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...