当前位置: 首页 > article >正文

python语言基础-5 进阶语法-5.4 正则表达式

声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。

5.4 正则表达式

5.4.1 正则表达式

正则表达式的概念:

  • 正则表达式是用来简洁表达一组字符串的表达式;
  • 正则表达式简洁地反映了一组字符串的特征。

正则表达式的使用:为了使用正则表达式,要进行编译。编译:将符合正则表达式语法的字符串转换成正则表达式特征。

正则表达式的语法:正则表达式语法由字符与操作符构成,如:P(Y|YT|YTH|YTHO)?N,其中()、|与?均为操作符。

正则表达式常用操作符:

  • .,表示任意单个字符;
  • [],字符集,对单个字符给出取值范围,如:[abc]表示要么取a要么取b要么取c,[a-z]表示a到z单个字符;
  • [],非字符集,对单个字符给出排除范围,如:[abc]表示非a或b或c的单个字符;
  • #,前一个字符的0次或无限次扩展,如abc表示ab、abc、abcc、abccc……;
  • +,前一个字符的1次或无限次扩展,如abc+表示abc、abcc、abccc……;
  • ?,前一个字符的0次或1次扩展,如abc?表示ab、abc;
  • |,两边表达式任意一个,如abc|def表示abc、def;
  • {m},扩展前一个字符m次,如ab{2}c表示abbc;
  • {m,n},扩展前一个字符m~n次,如ab{1,2}c表示abc、abbc;
  • ,匹配字符串开头,如:abc表示以abc为首的字符串;
  • , 匹配字符串结尾,如: a b c ,匹配字符串结尾,如:abc ,匹配字符串结尾,如:abc表示以abc为尾的字符串;
  • (),分组标记,内部只能使用|操作符,如(abc)表示abc,(abc|def)表示abc、def;
  • \d,数字,等价于[0-9];
  • \w,单词字符,等价于[A-Za-z0-9]。

正则表达式的语法在各个语言中是通用的。

5.4.2 re库

python中提供了re库来支持正则表达式的使用。re是python的标准库,无须导入。

re库常用的功能函数有:

  • re.search(),在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象;(在字符串中搜索与正则表达式一样的地方)
  • re.Match(),从一个字符串的开始位置起匹配正则表达式,返回match对象;
  • re.findall(),搜索字符串,以列表类型返回全部能匹配的子串;
  • re.split(),将一个字符串按照正则表达式匹配结果进行分割,返回列表类型;
  • re.finditer(),搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象;
  • re.sub(),在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串。

正则表达式的类型是原生字符串类型raw。在使用正则表达式时,通常要使用原生字符串,这样做是为了避免使用普通字符串时需要处理转义字符的问题,而使正则表达式的语法变得臃肿。python中原生字符串的语法如下:

a = r'text';  # 在普通字符串前加r标识,即为原生字符串,原生字符串中的所有符号都是不发生转义的。

使用re库做正则匹配时,要注意两种匹配模式:

  • 贪婪匹配:当一个正则表达式与一个给定字符串存在多个匹配时,re库默认取最长匹配,这种匹配方式称为贪婪匹配。
  • 最小匹配:如果要取出的是最短的匹配结果,则称为最小匹配。使用最小匹配要加最小匹配操作符,常用的有:*?,前一个字符0次或无限次扩展,但获取最小匹配;+?,前一个字符1次或无限次扩展,但获取最小匹配;??,前一个字符0次或1次扩展,但获取最小匹配;{m,n}?,前一个字符m~n次扩展,但获取最小匹配。

更多关于re库的用法,可以在使用时详细查找资料。


http://www.kler.cn/a/405619.html

相关文章:

  • 【LC】242. 有效的字母异位词
  • Java安全—JNDI注入RMI服务LDAP服务JDK绕过
  • JavaWeb——Mybatis
  • MySQL数据库-索引的介绍和使用
  • C# 中的属性:安全且灵活的数据访问
  • 3D超声重建技术
  • Flink CDC的安装配置
  • 招聘和面试
  • MySQL性能分析工具的使用
  • 用python简单集成一个分词工具
  • 基于 DRNN 神经网络整定的 PID 解耦控制
  • Python 使用 Selenuim进行自动化点击入门,谷歌驱动,以百度为例
  • 数据驱动与并行策略:用 JUnit 5 让软件测试更高效
  • 前端面试题大汇总:React 篇
  • 2025杭州国际智能网联新能源汽车展览会
  • Linux 磁盘分区、格式化和挂载
  • DRNN 神经网络的Jacobian 信息辨识
  • Python-flet实现个人视频播放器
  • 太速科技-512-基于ZU19EG的4路100G 8路40G的光纤汇流计算卡
  • 动态规划 详解
  • 基于 springboot +vue 的实践性教学系统
  • 和为 K 的子数组(java)
  • shell循环
  • MinGW 与 MSVC 的区别与联系及相关特性分析
  • 小兔鲜项目总结——项目亮点
  • 神经网络问题之二:梯度爆炸(Gradient Explosion)