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中原生字符串的语法如下:

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

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

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

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

相关推荐
破茧蝴蝶4 小时前
Python分布式爬虫完整教程
开发语言·python
benchmark_cc4 小时前
量化系统架构设计:为什么应该将数据获取与策略逻辑解耦?
python·数据分析·pandas·量化交易·股票数据·quantdash
狗凯之家源码网4 小时前
全新 PHP 轻量客服聊天室源码深度评测
开发语言·php·聊天室系统
凤山老林5 小时前
Spring Boot 启动冲刺:耗时剖析、懒加载策略与事件驱动初始化优化
spring boot·后端·python
小白快快跑哦5 小时前
python-字符串全解(六):正则表达式-逻辑运算或
python·正则表达式·字符串·逻辑运算
远离UE45 小时前
UE5 Substrate Thin Film 源码拆析
开发语言·javascript·ue5
keyipatience5 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
Thinker QAQ5 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
道满科技5 小时前
Function Calling 参数总出错?只修参数就行
linux·windows·python
栈帧之外6 小时前
【C++】STL之set
开发语言·c++