33.从入门到精通:Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别

简介: 33.从入门到精通:Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别

Python3 正则表达式

在 Python3 中,可以使用 re 模块来进行正则表达式的匹配和处理。
以下是一个简单的例子,说明如何使用 re 模块进行正则表达式匹配:

import re
# 要匹配的字符串
text = "Hello, world! This is a test."
# 匹配所有的单词
pattern = r"\w+"
matches = re.findall(pattern, text)
# 输出匹配结果
print(matches)

在这个例子中,首先定义了一个要匹配的字符串 text,然后使用 re.findall() 函数来匹配所有的单词。在正则表达式中,\w+ 表示匹配一个或多个字母、数字或下划线。最后输出匹配结果。

除了 re.findall() 函数之外,还有其他一些常用的函数,例如:

  • re.match():从字符串的开头开始匹配,只匹配一个结果。
  • re.search():在字符串中搜索匹配项,只匹配一个结果。
  • re.sub():替换字符串中的匹配项。

以下是一个更复杂的例子,说明如何使用正则表达式进行邮箱地址的验证:

import re
# 要验证的邮箱地址
email = "test@example.com"
# 邮箱地址的正则表达式
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
# 验证邮箱地址是否合法
if re.match(pattern, email):
    print("Valid email address")
else:
    print("Invalid email address")

在这个例子中,首先定义了一个要验证的邮箱地址 email,然后定义了一个正则表达式 pattern,用于匹配合法的邮箱地址。正则表达式中,^[a-zA-Z0-9._%+-]+表示匹配一个或多个字母、数字、点号、下划线、百分号、加号或减号,@[a-zA-Z0-9.-]+表示匹配一个或多个字母、数字、点号或减号,.[a-zA-Z]{2,}$ 表示匹配一个或多个字母,长度至少为 2,且以点号结尾。


最后使用 re.match() 函数验证邮箱地址是否合法。如果匹配成功,则输出 Valid email address,否则输出

Invalid email address。 需要注意的是,正则表达式的语法比较复杂,需要仔细理解和使用。在编写正则表达式时,可以使用在线工具来测试和调试,例如 Regex101 或 RegExr。


re.match函数

re.match()函数是Python中re模块中的一个函数,用于尝试从字符串的起始位置匹配一个正则表达式模式。如果匹配成功,match()函数返回一个匹配对象,否则返回None。

下面是一个简单的例子,说明如何使用re.match()函数:

import re
# 匹配以hello开头的字符串
pattern = r'hello'
string = 'hello world'
match_obj = re.match(pattern, string)
# 判断是否匹配成功
if match_obj:
    print('Match succeeded.')
else:
    print('Match failed.')

在这个例子中,首先定义了一个正则表达式模式,用于匹配以hello开头的字符串。然后定义了一个字符串,用于进行匹配。接着使用re.match()函数进行匹配,如果匹配成功,match()函数返回一个匹配对象,否则返回None。最后根据返回值判断匹配是否成功,并输出相应的提示信息。

需要注意的是,re.match()函数只会尝试从字符串的起始位置进行匹配。如果要匹配整个字符串,可以使用re.search()函数。如果要匹配多个字符串,可以使用re.findall()函数。


re.search方法

re.search() 方法是 Python 中 re 模块中的一个函数,用于在字符串中搜索匹配项。如果匹配成功,search() 函数返回一个匹配对象,否则返回 None。

以下是一个简单的例子,说明如何使用 re.search() 函数:

import re
# 要搜索的字符串
text = "Hello, world! This is a test."
# 搜索包含单词 test 的字符串
pattern = r"test"
match_obj = re.search(pattern, text)
# 判断是否搜索成功
if match_obj:
    print("Match succeeded.")
    # 输出匹配结果
    print(match_obj.group())
else:
    print("Match failed.")
  • 在这个例子中,首先定义了一个要搜索的字符串 text,然后使用 re.search() 函数搜索包含单词 test的字符串。如果搜索成功,search() 函数返回一个匹配对象,否则返回 None。最后根据返回值判断搜索是否成功,并输出相应的提示信息。

需要注意的是,re.search() 函数只会搜索第一个匹配项。如果要搜索所有的匹配项,可以使用 re.findall() 函数。


re.match与re.search的区别

在 Python 的 re 模块中,re.match() 和 re.search() 都是用于正则表达式匹配的函数,但它们之间有一些区别。

re.match() 函数只匹配字符串的开头,如果字符串开头不符合正则表达式,则匹配失败,返回 None。例如:

import re
text = "hello world"
pattern = r"world"
match_obj = re.match(pattern, text)
print(match_obj)  # None

在这个例子中,正则表达式 “world” 不匹配字符串 “hello world” 的开头,因此 re.match() 函数返回 None。

re.search() 函数匹配整个字符串,直到找到第一个符合正则表达式的子串。例如:

import re
text = "hello world"
pattern = r"world"
match_obj = re.search(pattern, text)
print(match_obj)  # <re.Match object; span=(6, 11), match='world'>

在这个例子中,正则表达式 “world” 匹配字符串 “hello world” 中的子串 “world”,因此 re.search()

函数返回一个匹配对象。


re.match() 函数只匹配字符串的开头,因此它的效率比 re.search() 函数高。如果只需要匹配字符串的开头,可以使用 re.match() 函数。例如:

import re
text = "hello world"
pattern = r"hello"
match_obj = re.match(pattern, text)
print(match_obj)  # <re.Match object; span=(0, 5), match='hello'>

在这个例子中,正则表达式 “hello” 匹配字符串 “hello world” 的开头,因此 re.match() 函数返回一个匹配对象。


需要注意的是,re.match() 和 re.search() 函数都只匹配第一个符合正则表达式的子串。如果需要匹配所有符合条件的子串,可以使用 re.findall() 函数。


相关文章
|
12月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1224 7
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
726 1
|
API 数据安全/隐私保护 开发者
Python自定义异常:从入门到实践的轻松指南
在Python开发中,自定义异常能提升错误处理的精准度与代码可维护性。本文通过银行系统、电商库存等实例,详解如何创建和使用自定义异常,涵盖异常基础、进阶技巧、最佳实践与真实场景应用,助你写出更专业、易调试的代码。
455 0
|
IDE 开发工具 数据安全/隐私保护
Python循环嵌套:从入门到实战的完整指南
循环嵌套是Python中处理多维数据和复杂逻辑的重要工具。本文通过实例讲解嵌套循环的基本用法、常见组合、性能优化技巧及实战应用,帮助开发者掌握其核心思想,避免常见错误,并探索替代方案与进阶方向。
869 0
|
数据采集 监控 数据安全/隐私保护
Python正则表达式:用"模式密码"解锁复杂字符串
正则表达式是处理字符串的强大工具,本文以Python的`re`模块为核心,详细解析其原理与应用。从基础语法如字符类、量词到进阶技巧如贪婪匹配与预定义字符集,结合日志分析、数据清洗及网络爬虫等实战场景,展示正则表达式的强大功能。同时探讨性能优化策略(如预编译)和常见错误解决方案,帮助开发者高效掌握这一“瑞士军刀”。最后提醒,合理使用正则表达式,避免过度复杂化,追求简洁优雅的代码风格。
457 0
|
Python
Python字符串格式化利器:f-strings入门指南
Python字符串格式化利器:f-strings入门指南
699 80
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
2094 1
Python API接口实战指南:从入门到精通
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
474 4
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
1829 1

推荐镜像

更多