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则是返回所有匹配到的字符串,前者是以列表的方法返回,后则是以迭代器的方式返回。




相关文章
|
13天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
16天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
45 0
|
6天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
19 5
|
9天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
26 4
|
9天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
20 2
|
15天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
36 7
|
1月前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
11天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
15天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
21 3
|
18天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
39 5