正则查找相关的方法 | 手把手教你入门Python之八十五

简介: 在Python中的查找匹配⽅法,常⻅的有五种,他们的⽤法⼤致相同,但是匹配出的结果却不同。

上一篇:正则表达式简介 | 手把手教你入门Python之八十四
下一篇:Re.Match类的介绍 | 手把手教你入门Python之八十六

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

正则查找相关的方法

在Python中的查找匹配⽅法,常⻅的有下⾯五种,他们的⽤法⼤致相同,但是匹配出的结果却不同。

  • match⽅法(只匹配字符串开头)
  • search⽅法(扫描整个字符串,找到第⼀个匹配)
  • findall⽅法(扫描整个字符串,找到所有的匹配)
  • finditer⽅法(扫描整个字符串,找到所有的匹配,并返回⼀个可迭代对象)
  • fullmatch(完整匹配,字符串需要完全满足正则规则才会有结果,否则就是None)

match⽅法的使⽤

re.match尝试从字符串的起始位置匹配⼀个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:

re.match(pattern,string,flags=0)
参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,⽤于控制正则表达式的匹配⽅式,如:是否区分⼤⼩写,多⾏匹配等等。

我们可以使⽤group(num)函数来获取匹配表达式。

import re
result1 = re.match(r'H','Hello')
result2 = re.match(r'e','Hello')
print(result1.group(0)) # 'H' 匹配到的元素
print(result1.span()) # (0,1) 匹配到的元素所在位置
print(result2) # None

search⽅法的使⽤

re.search 扫描整个字符串并返回第⼀个成功的匹配。
函数语法:

re.search(pattern, string, flags=0)

示例:

import re
result1 = re.search(r'He','Hello')
result2 = re.search(r'lo','Hello')

print(result1.group(0)) # He
print(result1.span()) # (0,2)
print(result2.group(0)) # lo
print(result2.span()) # (3,5)

re.match与re.search的区别
相同点:1、只对字符串查询一次
2、返回值类型都是re.Match类型的对象
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;⽽re.search匹配整个字符串,直到找到⼀个匹配。
示例:

result1 = re.search(r'天⽓','今天天⽓不错哟')
result2 = re.match(r'天⽓','今天天⽓不错哟')
print(result1) # <re.Match object; span=(2, 4), match='天⽓'>
print(result2) # None

findall ⽅法的使⽤

在字符串中找到正则表达式所匹配的所有⼦串,并返回⼀个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配⼀次 findall 匹配所有。

语法格式:

re.findall(pattern,string,flags=0)

示例代码:

ret = re.findall(r'\d+','he23ll34')
print(ret) # ['23', '34']
ret = re.match(r'\d+','he23ll34')
print(ret) # None match只匹配开头,所以匹配到
ret = re.search(r'\d+','he23ll34')
print(ret) # <re.Match object; span=(2, 4), match='23'> search 只能匹配到⼀个数字

注意事项:
findall⽅法匹配时,如果匹配规则⾥有分组,则只匹配分组数据。

ret = re.findall(r'\w+@(qq|126|163)\.com','123@qq.com;aa@163.com;bb@126.com')
print(ret) # ['qq', '163', '126'] 只匹配到了分组⾥的内容

如果正则表达式⾥存在多个分组,则会把多个分组匹配成元组。

ret = re.findall(r'\w+@(qq|126|163)(\.com)','123@qq.com;aa@163.com;bb@126.com'
)
print(ret) #[('qq', '.com'), ('163', '.com'), ('126', '.com')]

如果想要让findall匹配所有的内容,⽽不仅仅只是匹配正则表达式⾥的分组,可以使⽤ ?: 来将分组标记为⾮捕获分组。

ret = re.findall(r'\w+@(?:qq|126|163)\.com','123@qq.com;aa@163.com;bb@126.com'
)
print(ret) # ['123@qq.com', 'aa@163.com', 'bb@126.com']

finditer⽅法的使⽤

和 findall 类似,在字符串中找到正则表达式所匹配的所有⼦串,并把它们作为⼀个迭代器返回。

ret = re.finditer(r'\d+','he23ll34') # 得到的结果是⼀个可迭代对象
for x in ret: # 遍历 ret 取出⾥⾯的每⼀项匹配
 print(x.group(), x.span()) # 匹配对象⾥的group保存了匹配的结果

fullmatch⽅法的使⽤

完整匹配,字符串需要完全满足正则规则才会有结果,否则就是None。

m1 = re.fullmatch(r'hello world', 'hello world')
m2 = re.fullmatch(r'h.*d', 'hello world')

print(m1)
print(m2)

配套视频

相关文章
|
5天前
|
机器学习/深度学习 数据采集 数据挖掘
11种经典时间序列预测方法:理论、Python实现与应用
本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。
29 2
11种经典时间序列预测方法:理论、Python实现与应用
|
23小时前
|
存储 算法 Python
【10月更文挑战第16天】「Mac上学Python 27」小学奥数篇13 - 动态规划入门
本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念,并解决一个经典问题:斐波那契数列。学生将学习如何使用动态规划优化递归计算,并掌握编程中的重要算法思想。
32 3
|
1天前
|
开发者 Python
Python中的魔法方法与运算符重载
在Python的奇妙世界里,魔法方法(Magic Methods)和运算符重载(Operator Overloading)是两个强大的特性,它们允许开发者以更自然、更直观的方式操作对象。本文将深入探讨这些概念,并通过实例展示如何利用它们来增强代码的可读性和表达力。
|
3天前
|
设计模式 开发者 Python
Python编程中的设计模式:从入门到精通####
【10月更文挑战第14天】 本文旨在为Python开发者提供一个关于设计模式的全面指南,通过深入浅出的方式解析常见的设计模式,帮助读者在实际项目中灵活运用这些模式以提升代码质量和可维护性。文章首先概述了设计模式的基本概念和重要性,接着逐一介绍了几种常用的设计模式,并通过具体的Python代码示例展示了它们的实际应用。无论您是Python初学者还是经验丰富的开发者,都能从本文中获得有价值的见解和实用的技巧。 ####
|
5天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
11 1
|
5天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从入门到精通Python,打好 LLM大模型的基础
Python学习圣经:从0到1精通Python,打好AI基础
|
5天前
|
数据可视化 定位技术 Python
Python数据可视化--Matplotlib--入门
Python数据可视化--Matplotlib--入门
12 0
|
5天前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--入门
Python数据分析篇--NumPy--入门
16 0
|
5天前
|
IDE 开发工具 索引
Python基础知识---入门
Python基础知识---入门
5 0
|
Python
【Python零基础入门篇 · 38】:正则的高级用法
【Python零基础入门篇 · 38】:正则的高级用法
【Python零基础入门篇 · 38】:正则的高级用法