python | 正则表达式re库常用方法介绍

简介: python | 正则表达式re库常用方法介绍

image.png


还是开篇点题,本篇文章所依赖的环境为:

image.png

使用find方法查找系统库re的命令为:

image.png


这篇文章将持续介绍python正则表达式,上一节我们介绍了正则表达式的一些概念和基础正则表达式的使用,如果没有看过的小伙伴,强烈先看上一篇文章: juejin.cn/post/722125…


本篇文章,将继续讲解python正则表达式,主要是pythonre模块熟练使用,如果还对正则表达式特殊字符有问题或者不太熟悉的,建议先看python官方文档这块的描述: docs.python.org/zh-cn/3.7/l…

image.png


python re常用方法


python提供的标准模块re是与perl类似的正则表达式操作的模块,在python 1.5版本中被引入,主要是用于替换regexregsub模块,当然了,这2个模块也在python 2.5的时候被移除掉了。后面关于正则,只需要引入re模块就好了(仅限于文章开头所标注的python版本哦)。


我们之前只用过compilefindall,其实re还有很多的方法,例如:


re库中常用的方法:

  • compile: 编译为正则表达式对象。
  • findall: 查找字符串中出现的正则表达式模块,并且返回一个列表。
  • finditer: 和findall模块一样,只不过返回的是一个迭代器。
  • match: 从字符串开头匹配,成功返回匹配的第一个对象以及下标,失败则返回None
  • search: 匹配整个字符串,成功就返回匹配对象,失败就返回None

接下来,我们一起看看应用实例。



正则表达式编译还是不编译


是不是很好奇,python作为解释性语言,为什么还会有编译正则表达式呢,而且还提供了对应的方法compile


在回答这个问题之前,我们先来看个例子:


import re
# 测试字符串
testTxt = "hello pdudo juejin , 好好学习,天天向上"
# 方法1
print(re.findall('p[du]{3}o',testTxt))
# 方法2
compile = re.compile("p[du]{3}o")
print(re.findall(compile,testTxt))

上述代码中,首先定义了一个字符串testTxt,而后直接在findall中使用正则字符串 以及使用compile编译后的正则表达式。


当然了,2个属于都输出了预期的结果:

image.png

所以,问题来了:为什么需要编译正则表达式?


这是因为使用compile方法,可以将正则表达式编译成一个可复用的对象,以便这个对象在多次匹配调用的时候一次来提高性能 且 使代码更易读、易维护。


额,,,那么它是咋提高性能的呢? 我们看下底层代码了。


我们点进re模块的compile方法,发现就调用了_compile方法。

image.png


我们可以持续查看_compile来了解底层是如何操作的:

image.png

在此函数中,首先会尝试在缓存中获取已经编译过得正则表达式对象,该方法是_cahce,如果找到了,就直接返回之,否则就会检查正则表达式语法是否合规,而后使用 sre_compilecompile进行编译为对象,最后存进缓存中。


所以通过上述案例来讲,如果正则表达式需要多次使用,那么建议还是使用compile进行编译。



使用match和search匹配字符串


search方法多用于匹配字符串内容,使用search进行匹配正则,如果成功,则会返回匹配的第一个的信息,包括下标,以及匹配的字符串(可以使用group获取),如果失败,则会返回None,例如如下代码:

import re
testTxt = "hello pdudo juejin , 好好学习,天天向上,pdudo"
print(re.search('pdudo',testTxt))
print(re.search('123',testTxt))

可以运行看下:

image.png


由于匹配123没有,所以直接返回None,如果匹配成功了,则返回第一个匹配的下标(span), 以及匹配成功的值(match)。

可以将上述给优化一下,使用一个if判断之:


image.png



match,用法和search几乎一致,但是需要注意的是,它只能从字符串开头进行匹配,相当于加了一个正则特殊字符^

例如:

image.png


所以做个总结:

search方法会搜索整个字符串,并且返回第一个匹配的。

match方法会从字符串开头进行匹配,并且返回第一个匹配的。



使用 findall 和 finditer 匹配字符串


这2个方法都会返回所有的匹配项,只不过前则是以列表的方式返回的,而后则是以迭代器的方式返回的,具体可看下面这个例子:


image.png



此二者都可以使用for进行循环,迭代器和列表的区别就暂不叙述了,可以翻翻之前的文章。



总结


该篇文章,总共介绍了pythonre的5个方法,分别为: compilematchsearchfindall以及finditer


其中matchsearch都是返回匹配到的第一个字符串,但是match是从行首就开始匹配,而search是匹配整个字符串。


findallfinditer则是返回所有匹配到的字符串,前者是以列表的方法返回,后则是以迭代器的方式返回。




相关文章
|
11月前
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
2278 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
11月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
984 0
|
10月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
682 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
10月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
952 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
12月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
718 18
Python 内置正则表达式库re的使用
正则表达式是记录文本规则的代码,用于查找和处理符合特定规则的字符串。在Python中,常通过原生字符串`r'string'`表示。使用`re.compile()`创建正则对象,便于多次使用。匹配字符串有`match()`(从开头匹配)、`search()`(搜索首个匹配)和`findall()`(找所有匹配)。替换字符串用`sub()`,分割字符串则用`split()`。
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
|
安全 算法 Python
Python高级语法与正则表达式(一)
Python提供了 with 语句的写法,既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。
Python使用正则表达式分割字符串
在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。

推荐镜像

更多