【30天玩转python】正则表达式

ops/2024/9/25 3:57:46/

正则表达式

正则表达式(Regular Expression,简称 regex 或 RE)是一种用来匹配字符串的强大工具。通过定义模式,正则表达式可以帮助我们查找、替换、或验证文本中的特定字符或字符串。在 Python 中,正则表达式通过 re 模块来实现。


1. 正则表达式基础

正则表达式使用特殊的符号和字符组合来描述匹配规则。常见的正则表达式符号如下:

符号描述
.匹配任意单个字符(除换行符)
^匹配字符串的开头
$匹配字符串的结尾
*匹配前一个字符 0 次或多次
+匹配前一个字符 1 次或多次
?匹配前一个字符 0 次或 1 次
\d匹配任何数字,等价于 [0-9]
\D匹配任何非数字字符
\w匹配任何字母、数字或下划线,等价于 [a-zA-Z0-9_]
\W匹配任何非字母、非数字或非下划线的字符
\s匹配任何空白字符,包括空格、制表符等
\S匹配任何非空白字符
[]匹配括号内的任意字符
``
()用于分组和捕获

2. Python 中的 re 模块

Python 提供了内置的 re 模块来处理正则表达式。常用的函数包括:

  • re.match():从字符串开头匹配正则表达式
  • re.search():搜索字符串中与正则表达式匹配的第一个位置。
  • re.findall():找到字符串中所有匹配的部分,并以列表返回。
  • re.sub():替换字符串中与正则表达式匹配的部分。
  • re.split():根据正则表达式分割字符串。

3. 常用正则表达式操作

3.1 re.match()

re.match() 用于从字符串的开头匹配正则表达式,如果开头不匹配则返回 None

示例:匹配数字开头的字符串

python">import repattern = r'^\d+'
text = "123abc"match = re.match(pattern, text)
if match:print("匹配成功:", match.group())
else:print("匹配失败")

输出:

匹配成功: 123
3.2 re.search()

re.search() 会扫描整个字符串,找到第一个匹配的部分。

示例:查找字符串中的第一个数字

python">import repattern = r'\d+'
text = "Hello 123, this is a test."search = re.search(pattern, text)
if search:print("找到匹配:", search.group())
else:print("未找到匹配")

输出:

找到匹配: 123
3.3 re.findall()

re.findall() 返回所有匹配的部分,结果以列表形式返回。

示例:查找字符串中的所有数字

python">import repattern = r'\d+'
text = "There are 3 apples, 5 bananas, and 12 oranges."matches = re.findall(pattern, text)
print("所有匹配项:", matches)

输出:

所有匹配项: ['3', '5', '12']
3.4 re.sub()

re.sub() 用于将字符串中与正则表达式匹配的部分替换为指定的字符串。

示例:将字符串中的数字替换为 #

python">import repattern = r'\d+'
text = "My phone number is 12345"result = re.sub(pattern, "#", text)
print(result)

输出:

My phone number is #
3.5 re.split()

re.split() 根据正则表达式分割字符串,并返回列表。

示例:根据空白字符分割字符串

python">import repattern = r'\s+'
text = "Split  this  string   by spaces."result = re.split(pattern, text)
print(result)

输出:

['Split', 'this', 'string', 'by', 'spaces.']

4. 使用正则表达式进行验证

正则表达式常用于验证用户输入,例如邮箱、手机号等格式。

4.1 验证邮箱地址

邮箱的格式为:username@domain.com,其中 username 可以包含字母、数字、下划线,domain 是由字母和数字组成的域名,域名后缀为 .com.net.org 等。

示例:验证邮箱地址

python">import redef validate_email(email):pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'return re.match(pattern, email) is not Noneemail = "test@example.com"
if validate_email(email):print("邮箱格式正确")
else:print("邮箱格式不正确")

输出:

邮箱格式正确
4.2 验证手机号

假设我们需要验证中国大陆的手机号,规则为:以 1 开头,后跟 10 位数字。

示例:验证手机号

python">import redef validate_phone(phone):pattern = r'^1\d{10}$'return re.match(pattern, phone) is not Nonephone = "13812345678"
if validate_phone(phone):print("手机号格式正确")
else:print("手机号格式不正确")

输出:

手机号格式正确

5. 捕获组与非捕获组

5.1 捕获组

捕获组使用小括号 (),可以提取正则表达式匹配的子串。

示例:提取日期中的年、月、日

python">import repattern = r'(\d{4})-(\d{2})-(\d{2})'
text = "Date: 2024-09-13"match = re.search(pattern, text)
if match:print("年:", match.group(1))print("月:", match.group(2))print("日:", match.group(3))

输出:

年: 2024
月: 09
日: 13
5.2 非捕获组

有时我们只想分组但不捕获结果,此时可以使用 (?:...) 来定义非捕获组。

示例:非捕获组的使用

python">import repattern = r'(?:abc)+'
text = "abcabcabc"match = re.search(pattern, text)
if match:print("匹配成功:", match.group())

6. 常见正则表达式示例

场景正则表达式描述
匹配邮箱[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+匹配标准邮箱地址
匹配手机号1\d{10}匹配中国大陆 11 位手机号
匹配日期\d{4}-\d{2}-\d{2}匹配日期(格式为 yyyy-mm-dd)
匹配 IP 地址\d{1,3}(\.\d{1,3}){3}匹配 IPv4 地址
匹配 URLhttps?://[a-zA-Z0-9./?&=_-]+匹配 HTTP 或 HTTPS 开头的 URL
匹配邮政编码[1-9]\d{5}(?!\d)匹配 6 位中国邮政编码

7. 小结

  • 正则表达式是一种强大的字符串处理工具,可以用于模式匹配、字符串替换等。
  • Python 的 re 模块提供了丰富的 API 来操作正则表达式,常用的函数包括 match()search()findall()sub()split()
  • 捕获组和非捕获组能够帮助我们提取和处理字符串中的子

http://www.ppmy.cn/ops/115604.html

相关文章

初探shell与bash使用指南

文章目录 一、shell二、bash第一步、新建脚本第二步、添加权限第三步、执行bash脚本 在日常开发中,经常使用到Linux服务器相关知识,输入命令获取想要的结果,本篇介绍shell 与 bash的相关知识。 一、shell 是命令行解释器,接收用户…

如何在 Qt 的 QListWidget 中逐行添加和显示数据

文章目录 如何在 Qt 的 QListWidget 中逐行添加和显示数据目标实现步骤1. 在 Qt Designer 中添加 QListWidget2. 在代码中逐行添加数据示例代码 代码解析3. 使用自定义项 运行效果总结 如何在 Qt 的 QListWidget 中逐行添加和显示数据 QListWidget 是 Qt 提供的一个非常方便的…

爬虫的流程

爬虫的流程 获取网页提取信息保存数据自动化程序能爬怎样的数据 获取网页 获取网页就是获取网页的源代码,源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息浏览器访问网页的本质:浏览器向服…

Web 服务器介绍 | 通过 Tomcat 说明其作用

1. 什么是 Web 服务器? Web服务器是一种用于存储、处理和提供网页或Web应用程序的服务器。它通过HTTP(超文本传输协议)与客户端(通常是浏览器)进行通信,接收客户端的请求(如网页请求&#xff0…

HarmonyOS 速记

目录 装饰器Entry(入口)Component(组件)Builder(构建)State(状态)Prop(属性)Preview(预览)PreviewerInspector 结构体structbuild自定义组件自定义 Custom 组件 export(导出) & import(导入) Page(页面)生命周期aboutToAppear 数据Array(数组/集合)Map(映射) 容器&#xff…

Linux 进程3

进程地址空间 CPU读取数据都需要地址,在计算机中所有东西都是一种数据,包括我们的进程。 这是一个进程空间示意图,操作系统通过task_struct结构体链表来管理每一个进程,结构体里面有一个指针指向操作系统为进程开辟的一段空间&am…

VM虚拟机下载以及激活

传统的官网已经找不到下载了,这里我将下载好的放在阿里云盘,百度云盘太慢了,懂得都得 阿里云盘分享 下载好了后会是一个exe文件,直接双击运行就可 下载无脑下一步即可,这里不做介绍 下载好了后,需要密钥这里…

82页经典PPT | 构建数字化工厂的智能制造-数字化智能制造

深入探讨了智能制造在现代制造业中的应用与挑战。文档从新模式、新技术、新制造的挑战入手,分析了中国制造业当前面临的问题,并提出了构建数字化工厂以实现智能制造的策略。文档涵盖了工业4.0、工业互联网、AI云计算、移动互联等多个前沿技术领域&#x…