Python re库match(),serach(),findall()和finditer()方法使用
之前整理过一篇关于正则表达式基本语法的文章,详见正则表达式。这篇博客将介绍python中re库的使用,主要涉及match(),search(),findall()和finditer()方法的使用。
在使用re库之前,首先需要引入re库
import re
一个正则表达式与普通字符串没有任何区别,只有经过re库编译才能代表满足该特征的一组字符串。因此如果字符串中包含反斜杠+特殊字符,Python解释器会将其进行转义。例如:”\b“会被解释成”退格“。所以在使用含有反斜杠的正则表达式时,应该告诉解释器不要转义字符串里面的符号,而是直接传递给re库处理。在Python中在字符串前加上前缀”r“表明这是一个原生字符串,这样Python解释器将不再对其进行解释。通常,在书写正则表达式时,采用r’…’是一个良好的习惯。
1、search()方法
在字符串中搜索匹配正则表达式的第一个位置,返回match对象。
re.search(pattern, string, flags=0)
pattern:正则表达式
string:待匹配的字符串
flags:正则表达式使用控制标记re.I:忽略正则表达式中的大小写,比如:[A-Z]也能够匹配小写的a-zre.M:正则表达式中^操作符能够将字符串每行当作匹配开始re.S:正则表达式中.操作符能够匹配所有字符,默认情况下.不能匹配换行
import re
match = re.search(r"\w+", "Hello World") # match对象
if match:print(match.group(0))
以上示例代码将输出Hello
,match对象将在后面介绍。
2、match()方法
从字符串的开始位置开始匹配正则表达式,返回match对象。
import re
match = re.match(r"[1-9]\d{5}", "HHU 211100")
if match:print(match.group(0))
以上示例代码将不会返回任何匹配串,因为match()方法是从字符串开始位置开始匹配,将不会得到任何匹配结果。再调用返回结果之前,判断是否为空是一个很好的习惯。
3、findall()方法
Return all non-overlapping matches of pattern in string, as a list of strings.
搜索字符串,以列表形式返回所有匹配的子串。
import re
ls = re.findall(r"[0-9]\d{5}", "HHU 211100 HHU211000")
print(ls)
以上示例代码将输出211100 211000
,可见findall()将全部匹配的结果都保存到了list中。
4、finditer()方法
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象。因此可以通过循环,对每一个匹配子串进行操作。
import re
for m in re.finditer(r"[0-9]\d{5}", "HHU211100 HHU211000"):if m:print(m.group(0))
以上代码将迭代输出匹配的结果。
以上都是采用函数式调用方法,也可以采用面向对象方法,先对正则表达式进行编译,然后就可以多次操作了。
import re
regex= re.compile(r"[0-9]\d{5}")
result = regex.search("HHU 211100")
5、match对象
match对象包含了一次匹配的结果。
match对象包含以下属性和方法
# 属性
.string:待匹配字符串
.re:匹配时使用的正则表达式对象
.pos:正则表达式搜索文本开始的位置
.endpos:正则表达式搜索文本的结束位置
# 方法
group():获得匹配后的字符串
start():匹配字符串在原始字符串中的起始位置
end():匹配字符串在原始字符串中的结束位置
.span():将匹配字符串在原始字符串中的起始位置和结束位置以元组的形式返回
6、使用注意点
1、所有方法都采用贪婪匹配,即返回所有匹配成功的最长的那个子串。
2、findall()方法
import re
# 下面正则表达式用来匹配所有的单词包括缩写和连词
ls = re.findall(r"\w+([-']\w+)*", "graph-based state-of-the-art it's")
print(ls)
# 输出["-based", "-art", "'s"]ls = re.findall(r"(\w+([-']\w+)*)", "graph-based state-of-the-art it's")
print(ls)
# 输出[('graph-based', '-based'), ('state-of-the-art', '-art'), ("it's", "'s")]ls = re.findall(r"[0-9]\d{5}", "HHU 211100 HHU211000")
print(ls)
#输出["211100", "211000"]
第一个例子中正则表达式带有1个括号,其输出的内容就是括号内的正则表达式匹配到的内容,而不是整个表达式所匹配到的结果。
第二个例子中正则表达式带有2个括号,我们可以看到其输出的list中每个元素是一个包含2个元素的tuple,其中tuple的第一个元素是最外层()也就是整个表达式匹配的结果,第二个元素是里面()匹配的结果。
第三个例子中正则表达式不带有括号,其输出的内容就是整个表达式所匹配到的内容。
结论:findall()返回的是括号内的正则表达式所匹配到的结果,多个括号就会返回多个括号分别匹配到的结果,如果没有括号就返回就返回整个正则表达式所匹配到的结果。
Python re库match(),serach(),findall()和finditer()方法使用相关推荐
- Python正则表达式:match(),search(),findall()与finditer()的用法
https://blog.csdn.net/qq_39521554/article/details/79462405
- 【python】re模块的 findall 和 finditer 函数用法
python正则模块re中findall和finditer两者相似,但却有很大区别. 区别 findall返回list finditer返回一个MatchObject类型的iterator 详细举例介 ...
- python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤
字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括: ...
- re.I参数实现在findall和finditer方法中实现匹配忽略大小写
大小写不敏感可以用参数re.I(I可能是代表ignore,我猜的,便于记忆),这个参数可以作为可选参数,填写在findall和finditer方法的后面.注意findall和finaiter的区别,f ...
- python中turtle怎么确定坐标_关于Python turtle库使用时坐标的确定方法
关于Python turtle库使用时坐标的确定方法 想画一个比较复杂的图像,而且还想用turtle画,最让人想退却的是无规律的笔势和繁多的坐标,但既然没有按奈住冲动的心,那我告诉你一个比较笨的方法吧 ...
- python 安装库 报错 SSL: CERTIFICATE_VERIFY_FAILED 解决方法
目录 问题描述 临时解决方法 永久生效方法 问题描述 pip install virtualenv Collecting virtualenv /opt/python27/lib/python2.7/ ...
- python autocad库_Python AutoCAD 系统设置的实现方法
1. 连接及库导入 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' ============================= Author:Dal ...
- Python——turtle库绘制菱形的3种方法
绘制一个菱形四边形,边长为 200 像素.方法1和2绘制了内角为60和120度的菱形,方法3绘制了内角为90度的菱形. 方法1 ...
- python turtle库setpos_Python内置海龟(turtle)库绘图命令详解(二)
继续谈利用海龟库(turtle库)做图.在这篇文章(Python内置海龟(turtle)库绘图命令详解(一))中已经介绍了turtle的一些基本画图命令,包括画布的设计.画笔属性与状态的设置以及画笔的 ...
- 最全总结Python 第三方库安装方法
下面将自己学习过程中总结的Python第三方库的安装常用三种方法分享给大家,本人推荐前面两种方式.(已安装Python) 方法一:pip命令行直接安装 打开cmd命令窗口,通过命令 pip insta ...
最新文章
- python学习笔记三一 函数学习
- 【转】WPF之路-常用布局控件一
- php 完美防sql注入,PHP 完美的防XSS 防SQL注入的代码
- 一款可以安利的MarkDown编辑器
- latex hyperref_Latex 用subfig引用子图显示括号
- angularjs 服务详解
- python判断密码是否合法性_菜鸟使用python实现正则检测密码合法性
- python实现excel的覆盖写入和追加
- android nexus 刷机工具包,Android Nexus 6p刷机及root
- 家里的无线网最近总是网速不稳定,一阵一阵的卡,是怎么回事?
- 计算机中含有旧的mf驱动程序,打印机驱动在应用时的小窍门
- kalman滤波理解一:理论框架
- mame4android汉化,MAME4droid
- Python爬虫抓取链家二手房数据
- Ps 钢笔工具的使用
- linux内网穿透(内外网服务器端口映射)
- 猿辅导python编程老师面试_猿辅导辅导老师面试一系列的感受
- 计算机如何取消左缩进,Word中怎么去掉表格的缩进
- sync.Once化作一道光让我顿悟
- 广东第二师范学院计算机科学与技术(软件工程)的专业在哪,广东第二师范学院好就业吗?广东第二师范学院就业如何?...