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

【语法进阶】高级用法、贪婪与非贪婪

1.search():扫描整个字符串并返回第一个成功匹配的对象,如果匹配失败,就返回None

import re
res = re.search('\d','djkjlli2n')      #\d匹配数字
print(res.group())

2.findall()

作用: 以列表形式返回整个字符串中所有匹配到的字符串

2.2 简单使用
1.导入模块
import re
2. 使用findall()进行匹配操作
re.findall(pattern, string, flags=0):从头到位匹配,找到所有匹配成功的数据,返回一个列表。如果没有找到匹配的,则返回空列表。
pattern: 匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,是否多行匹配等,多数情况下使用不到。

import re
res = re.findall("\d", "123abc!@#123")   # 匹配所有数字
print(res)                               # ['1', '2', '3', '1', '2', '3']res = re.findall("\w{3}", "pythonth")
print(res)                               # ['pyt', 'hon']

注意:比起match(),findall()更为常用

总结


match()从头开始匹配,匹配成功返回match对象,通过group()进行提取,匹配失败就返回None,只匹配一次
search():从头到尾匹配,匹配成功返回第一个成功匹配的对象,通过group进行提取,匹配失败返回None,只匹配一次
findall():从头到尾匹配,匹配成功返回一个列表,匹配所有匹配成功的数据,不需要通过group()进行提取。没有group方法

3.sub(正则表达式,新内容,字符串,指定替换的次数) 将匹配到的数据进行替换

注意: 正则表达式代表需要被替换的,也就是字符串里面的旧内容

import re
res = re.sub('python','bingbing','hellopython')
print(res)   #hellobingbing
# res = re.sub('\d','2','这是这个月的第15天')
# print(res)   #这是这个月的第22天,没有设置次数默认全部替换
# res = re.sub('\d','2','这是这个月的第15天',1)
# print(res)   #这是这个月的第25天

4. split(pattern, string,maxsplit)

pattern 正则表达式
string 字符串
maxsplit指定最大分割次数

import re
res = re.split("s","hello, python")  #没有s所以不分割
# res = re.split("|","hello, python")   #这个符号会都分割
# res = re.split("o","hello, python")
print (res)

3. 贪婪与非贪婪

贪婪匹配:在满足匹配时,匹配尽可能长的字符串(即有多少匹配多少),默认情况下,采用贪婪匹配。

res = re.match('em*','emmmm...')  # *修饰的是字符m匹配0此到无数次
print(res.group())                # emmmm

默认情况下是贪婪匹配:有多少匹配多少

非贪婪匹配

在满足匹配时,匹配尽可能短的字符串(即能不匹配就不匹配,按照最少匹配次数进行匹配),使用?来表示非贪婪匹配。

在*,+,{m,n}等后面加上?,表示使贪婪变成非贪婪

res = re.match('em*?','emmmm...')   # *修饰的是字符m
print(res.group())                  # e

此时?修饰*,非贪婪时尽可能少的,*匹配前一个字符0个或无限个,?表示匹配前一个字符0个或者1个,所以*取的次数时0次,m的0个是空字符串

res = re.match('em+?','emmmm...')
print(res.group())                  # em

?修饰+,+匹配前一个字符1次或无限次,?表示匹配前一个字符0次或1次,所以取的次数最少是1次

res = re.match('m*','mmmmm')
print(res.group())                  # mmmmm
res = re.match('m*?','mmmmm')
print(res.group())                  #
# 字符串是mmmmm,开头匹配m,*最少是0个,所以一个m都没有匹配到。
res = re.match('m{1,5}','mmmmm')
print(res.group())                  # mmmmm,默认是贪婪匹配,匹配最多次数5
res = re.match('m{1,5}?','mmmmm')
print(res.group())                  # 加上?,非贪婪匹配,匹配最少次数1

原生字符串

print('lalal\t')   #结果lalal
print(r'lalal\t')   #结果lalal\tres = re.match("\\\\" , "\game")  ##正则表达式中,匹配字符串中的字符\需要\\\\
res = re.match(r"\\" , "\game")   #加了r(原生字符串)是2个代表一个
print (res.group())

http://www.dtcms.com/a/393386.html

相关文章:

  • 15天见效的SEO优化方案
  • C语言基础【20】:指针7
  • IC 数字逻辑设计中的硬件算法 01 记
  • 《棒球运动联盟》国家级运动健将标准·棒球1号位
  • AAC 详解
  • 蚂蚁集团DIVER登顶BRIGHT榜首,开源多阶段推理检索范式
  • 2013/12 JLPT听力原文 问题四
  • 挑战与应对:轻量化 AI 算法的成长烦恼
  • FPGA基础 -- CDC(Clock Domain Crossing)实战教程
  • 低碳经济:碳汇——从生态固碳到金融资产的价值转化
  • QGC 通信模块架构梳理
  • Application接口拓展功能(三)
  • 【Python】错误和异常
  • 【状态机实现】初识——基于状态机实现的流程编排和Activiti、Camunda、Flowable等工作流的区别
  • SpringBoot自动配置核心原理
  • Python 中的 Builder 模式实践 —— 以 UserProfileBuilder 为例
  • 探秘陌讯AIGC检测算法优化:详解MPS加速与模型热重载的实现原理
  • 1.3 管道(Pipe)核心知识点总结
  • GLUE:自然语言理解评估的黄金基准
  • 第13章 智能监测-设备数据处理
  • GEO技术科普
  • B004基于三菱FX2NPLC智能自提柜控制系统仿真
  • MTK CPU温度调节一知半解
  • V90伺服驱动器“速度模式“双极性模拟量速度控制
  • 课前练习题-20250919
  • C++类与对象
  • 企业级Docker镜像仓库Harbor
  • ESD防护设计宝典(七):生命线的秩序——关键信号线布线规则
  • 【ROS2】Beginner : CLI tools - 理解 ROS 2 话题
  • RL知识回顾