软件测试|深入理解Python中的re.search()和re.findall()区别

前言

在Python中,正则表达式是一种强大的工具,用于在文本中查找、匹配和处理模式。re 模块提供了许多函数来处理正则表达式,其中 re.search()re.findall() 是常用的两个函数,用于在字符串中查找匹配的模式。本文将深入介绍这两个函数的用法,以及详细的使用示例。

re.search() 函数

re.search() 函数用于在字符串中查找匹配的第一个子串,并返回一个匹配对象。如果找到了匹配,可以通过匹配对象的方法和属性来获取相关信息。

python 复制代码
import re

pattern = r'apple'
text = "I have an apple and a banana."

# 在文本中查找第一个匹配的子串
match = re.search(pattern, text)

if match:
    print("Found:", match.group())  # 获取匹配的子串
    print("Start:", match.start())  # 获取匹配的起始位置
    print("End:", match.end())      # 获取匹配的结束位置
else:
    print("No match found.")

re.findall() 函数

re.findall() 函数用于在字符串中查找所有匹配的子串,并返回一个包含所有匹配结果的列表。

python 复制代码
import re

pattern = r'\d+'  # 匹配一个或多个数字
text = "I have 3 apples and 5 bananas. Total 8 fruits."

# 查找所有匹配的子串
matches = re.findall(pattern, text)

if matches:
    print("Matches:", matches)  # 获取所有匹配的子串列表
else:
    print("No matches found.")

使用示例

  1. 使用 re.search() 查找日期
python 复制代码
import re

pattern = r'\d{2}-\d{2}-\d{4}'  # 匹配日期格式:dd-mm-yyyy
text = "Today's date is 31-08-2023."

match = re.search(pattern, text)

if match:
    print("Date found:", match.group())
else:
    print("No date found.")
  1. 使用 re.findall() 查找所有链接
python 复制代码
import re

pattern = r'https?://\S+'  # 匹配HTTP或HTTPS链接
text = "Here are some links: https://www.example.com and http://google.com"

links = re.findall(pattern, text)

if links:
    print("Links found:", links)
else:
    print("No links found.")
  1. 使用 re.findall() 查找电子邮件地址
python 复制代码
import re

pattern = r'\w+@\w+\.\w+'  # 匹配基本电子邮件地址
text = "Contact us at support@example.com or info@company.net"

emails = re.findall(pattern, text)

if emails:
    print("Email addresses found:", emails)
else:
    print("No email addresses found.")

总结

re.search() 用于查找第一个匹配的子串,而 re.findall() 则用于查找所有匹配的子串。通过在正则表达式模式中定义适当的规则,使得我们可以有效地在文本中查找并处理各种模式。这两个函数是处理文本匹配和搜索的重要工具,在文本处理和数据提取中非常有用。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
fouryears_234172 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~3 小时前
C#---StopWatch类
开发语言·c#
lifallen4 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi5 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
mit6.8245 小时前
[1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
人工智能·python
没有bug.的程序员5 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋5 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
cui__OaO6 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试6 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php