正则表达式
思维导图
正则表达式re模块 思维导图正则表达式
数量词的贪婪模式与非贪婪模式
正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。反斜杠的困扰
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\"表示。同样,匹配一个数字的"\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。匹配模式
正则表达式提供了一些可用的匹配模式,比如忽略大小写、多行匹配等,这部分内容将在Pattern类的工厂方法re.compile(pattern[, flags])中一起介绍。输出:
Python的re模块
re模块常量:
re模块函数:
(一)查找一个匹配项:
1.search:查找任意位置的匹配项
re.search(pattern,target):pattern是模式字符串,target作为需要匹配的字符串。 返回值为target中与pattern相匹配的子串。
2.match:必须从字符串开头匹配
与1.类似
3.fullmatch:整个字符串与正则完全匹配
与1.类似
输出:
注:查找到一个匹配项,返回的是一个re.Match对象
(二)查找多个匹配项:
1.findall:从字符串任意位置查找,返回一个列表
输出:
- finditer:从字符串任意位置查找,返回一个迭代器
迭代器是需要使用时一点一点生成出来的,内存使用更优。
(三)字符串分割函数
re.split(pattern, target, maxsplit=0, flags=0) 函数:用 pattern 分开 string , maxsplit表示最多进行分割次数, flags表示模式,flags取值即re模块中的9个常量。
输出:
在不需要正则支持且数据量和数次不多 的情况下使用str.split函数更合适,反之则使用re.split函数。
(四)字符串替换
替换主要有sub函数 与 subn函数,他们功能类似!
re.sub(pattern, repl, targetString, count=0, flags=0) 函数参数讲解:repl替换掉string中被pattern匹配的字符, count表示最大替换次数,flags表示正则表达式的常量。
repl替换内容既可以是字符串,也可以是一个函数
输出:
将所有数字全匹配成字母M
(五)编译正则对象
调用re模块的compile对象,返回一个Pattern对象,
调用Pattern对象的search方法,匹配第一个符合正则表达式的字符串。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?