Python新手必看:正则表达式入门到精通只需这一篇!

简介: 了解 Python 中的正则表达式,用于高效处理字符串。导入 `re` 模块,用 `r` 前缀避免转义困扰。示例:`re.split` 切分字符串,`re.findall` 进行匹配与查找,数量词如 `*`, `+`, `?` 控制匹配次数,边界匹配定位开始或结束。使用 `group` 和 `sub` 进行组合操作,解决复杂文本处理问题。正则表达式是字符串处理的利器,助你轻松应对各种场景。

在编程世界里,处理字符串是一项基本而又常见的任务。无论是数据清洗、日志分析,还是文本处理,我们都可能会遇到需要从一大堆文本中提取出我们需要的信息的场景。

这时候,正则表达式(Regular Expression)就成为了我们强大的工具。Python 作为一门功能丰富的编程语言,自然也提供了对正则表达式的强力支持。

今天,就让我们一起来学习如何在 Python 中使用正则表达式,轻松搞定字符串处理任务。

正则表达式初探

在 Python 中使用正则表达式之前,我们首先需要引入 re 模块。

import re

由于 Python 字符串和正则表达式都使用 \ 作为转义符,这有时会造成混淆。例如,当我们需要匹配字符 ABC\-001 时:

s = 'ABC\\-001' # 这里要注意 Python 字符串的转义

为了避免转义带来的麻烦,我们推荐使用 Python 的 r 前缀,这样字符串内部的表达式会被直接处理,不需要考虑转义的问题:

s = r'ABC\-001' # 使用 r 前缀,更直观

常用操作实例

以下是使用正则表达式进行常见字符串操作的一些实例。

切分字符串

利用正则表达式可以非常灵活地切分字符串。

r = re.split(r'[\s\,\;]+', 'a,b;; c  d')
print(r)  # 输出:['a', 'b', 'c', 'd']

匹配与查找

  • 匹配普通字符:直接将字符本身作为匹配模式。
a = 'c++|c#|php|python|java|javascript'
r = re.findall('Python', a)
print(r)  # 输出:[]
  • 匹配数字和非数字字符
# 匹配数字和非数字字符
r = re.findall('\d', a)   # 数字
r = re.findall('\D', a)   # 非数字
  • 匹配字符集:可匹配指定范围内的字符。
s = 'abc, acc, adc, aec, afc, ahc'
r = re.findall('a[cf]c', s)  # 匹配 'acc', 'afc'
res = re.findall('a[^cf]c', s)  # 排除 'acc', 'afc'
result = re.findall('a[c-f]c', s)  # 匹配 'acc', 'adc', 'aec', 'afc'

使用数量词

正则表达式通过数量词来指定字符出现的次数,包括贪婪模式和非贪婪模式。

s = 'python46546java&79879php'

# 默认贪婪模式
r1 = re.findall('[a-z]{3,6}', s) 

# 非贪婪模式
r2 = re.findall('[a-z]{3,6}?', s)

print(r1)  # 输出:['python', 'java', 'php']
print(r2)  # 输出:['pyt', 'hon', 'jav', 'php']

量词的使用:*,+,?

  • * 表示匹配前面的字符0次或多次。
  • + 表示匹配前面的字符1次或多次。
  • ? 表示匹配前面的字符0次或1次。
s = 'pytho0python1pythonn2'
r1 = re.findall('python*', s)  # 匹配 'python' 0次或多次
r2 = re.findall('python+', s)  # 匹配 'python' 1次或多次
r3 = re.findall('python?', s)  # 匹配 'python' 0次或1次

使用边界匹配

边界匹配可以帮助我们匹配字符串的开始或结束位置。

s = '10000146'
r1 = re.findall('^00000', s)  # 查找开头为 00000 的字符串
r2 = re.findall('00000$', s)  # 查找结尾为 00000 的字符串

进阶技巧

组合使用 groupsub

使用组(Group)提取数据,结合 sub 进行字符串的替换和处理,可以实现复杂的文本处理逻辑。

s = 'A8C34DD64GT79UI79D759'
def convert(value):
    matched = value.group()
    return '9' if int(matched) >= 6 else '0'
r = re.sub('\d', convert, s)

使用 group 提取数据

对于复杂的匹配需求,group 可以帮助我们提取感兴趣的数据。

s = 'life is short , i use python'
r1 = re.search('life(.*)python', s)
print(r1.group(1))  # 输出:' is short , i use '

通过上面的示例,我们不难看出,正则表达式是处理文本字符串的强大工具。

希望本文能帮助你在 Python 编程之旅中,轻松驾驭正则表达式,解决各类字符串处理问题。

相关文章
|
15天前
|
搜索推荐 Python
Python上下文管理器DIY指南:从入门到精通,轻松驾驭资源管理
【7月更文挑战第6天】Python的上下文管理器是资源管理的利器,简化文件操作、网络连接等场景。通过定义类及`__enter__`、`__exit__`方法,可自定义管理器,如示例中的`MyContextManager`,实现资源获取与释放。使用with语句,提升代码可读性和维护性,不仅用于基本资源管理,还可扩展到事务控制、自动重试等高级应用,让编程更加高效和灵活。
29 0
|
17天前
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析入门涉及基础如Python语言、数据分析概念及优势。
【7月更文挑战第5天】Python数据分析入门涉及基础如Python语言、数据分析概念及优势。关键工具包括NumPy(数组操作)、Pandas(数据处理)、Matplotlib(绘图)、Seaborn(高级可视化)和Scikit-learn(机器学习)。流程涵盖数据获取、清洗、探索、建模、评估和展示。学习和实践这些将助你有效利用数据。
|
13天前
|
安全 Java 调度
「Python入门」Python多线程
1. **线程与进程区别**:线程共享内存,进程独立;线程启动快,多线程效率高于多进程。 2. **多线程使用**:直接使用Thread类,通过`target`指定函数,`args`传递参数;或继承Thread,重写`run`方法。 3. **守护线程**:设置`setDaemon(True)`,主线程结束时,守护线程一同结束。 4. **join线程同步**:主线程等待子线程完成,如`t.join()`。 5. **线程锁**(Mutex):防止数据竞争,确保同一时间只有一个线程访问共享资源。 6. **RLock(递归锁)**:允许多次锁定,用于需要多次加锁的递归操作。
19 1
「Python入门」Python多线程
|
13天前
|
数据采集 XML JSON
「Python入门」Python代码规范(风格)
**Python编码规范摘要** - 编码:使用UTF-8编码,文件开头可声明`# -- coding: utf-8 --`。 - 分号:避免在行尾使用,不用于分隔命令。 - 行长:不超过80字符,长表达式可使用括号换行。 - 缩进:使用4个空格,禁止混用tab。 - 注释:行注释始于`#`和空格,块注释和文档注释遵循特定格式。 - 空行:函数和类定义间用2空行,方法间1空行,内部适当空行。 - 空格:运算符两侧各空一格,逗号后空格,括号内不空格。 - 命名:模块小写,变量下划线分隔,类驼峰式,布尔变量前缀`is_`。 - 引号:保持一致性,可使用单引号或双引号。
16 1
「Python入门」Python代码规范(风格)
|
18天前
|
测试技术 Python
|
3天前
|
存储 分布式计算 索引
Python函数式编程入门窥探
Python本身不是一门函数式编程语言,但是它参考了一些函数式编程语言很好的地方,除了可以写出更可读的代码外。还能用它来实现一些特定功能,本身也提供了强大的注解系统和函数和对象之间的灵活调用。
|
4天前
|
算法 数据挖掘 计算机视觉
Python并查集实战宝典:从入门到精通,让你的数据结构技能无懈可击!
【7月更文挑战第17天】并查集,如同瑞士军刀,是解决元素分组问题的利器,应用于好友关系、像素聚类、碰撞检测和连通性分析等场景。本文从基础到实战,介绍并查集的初始化、查找与路径压缩、按秩合并,以及在Kruskal算法中的应用。通过并查集,实现高效动态集合操作,对比哈希表和平衡树,其在合并与查找上的性能尤为突出。学习并查集,提升算法解决复杂问题的能力。
|
5天前
|
监控 数据可视化 定位技术
这本书凭什么得到ChatGPT认可,评价其为最值得读的Python入门书
在当今这个飞速发展且高度数字化的时代,编程已经成为一项至关重要的技能,其重要性愈发凸显。而 Python 作为一种在众多领域都有着广泛应用且相对来说较为容易学习的编程语言,顺理成章地成为了许多编程初学者的热门选择。 就在昨天,图灵君在浏览豆瓣的时候突然被这样一条评论闪到,一位网友说:“ChatGPT 推荐给我的入门书”。我想这书莫不是口碑爆棚、备受好评的蟒蛇书《Python编程:从入门到实践(第3版)》吧!仔细一看还真是!
|
17天前
|
数据采集 编译器 iOS开发
【Python从入门到精通】(一)就简单看看Python吧
【Python从入门到精通】(一)就简单看看Python吧
34 8
|
13天前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
15 0
「Python入门」python操作MySQL和SqlServer