Python高阶教程—正则表达式RE讲解

简介: Python3 正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

正则表达式(Regular Expression)

正则表达式(Regular Expression)是一种用于匹配字符串的工具,它可以根据特定的规则来匹配字符串。==正则表达式通常由一组字符和字符集合组成,其中字符集合定义了匹配的字符类型和位置。==

re.I

🧾 🧾 语法: re.IGNORECASE 或简写为 re.I

🧾 🧾 含义: 进行忽略大小写匹配。

在Python中,可以使用re模块中的re.IGNORECASE标志来实现正则表达式的忽略大小写。例如,如果要匹配字符串apple,可以使用以下代码:
import re  
  
pattern = re.compile('apple', re.I)  
text = 'The apple is red'  
  
match = pattern.search(text)  
  
if match:  
    print(match.group())  
else:  
    print('未找到匹配的字符串')

运行结果:
image.png

在上面的代码中,re.I标志被用来匹配字符串apple,这意味着在匹配时忽略大小写。pattern.search(text) 函数返回一个Match对象,如果找到匹配的字符串,则match.group()方法将被调用并打印出来,否则打印出未找到匹配的字符串。

re.A

🧾 🧾 语法: re.ASCII 或简写为 re.A

🧾 🧾 作用: ASCII表示ASCII码的意思,让 \w, \W, \b, \B, \d, \D, \s 和 \S 只匹配ASCII,而不是Unicode。

当使用re模块进行正则表达式匹配时,可以使用re.ASCII或re.A标志来匹配ASCII字符集,而不是Unicode字符集。这意味着,\w、\W、\b、\B、\d、\D、\s和\S只会匹配ASCII字符,而不是Unicode字符。

以下是一个使用re.ASCII或re.A标志的简单示例:

import re

# 匹配ASCII字符集中的数字和字母
pattern = re.compile(r'\w+', flags=re.ASCII)
text = 'Hello 世界 123'
match = pattern.findall(text)
print(match)

image.png

在上面的示例中,我们使用re.compile()函数创建了一个正则表达式对象,该对象使用了re.ASCII标志。然后,我们使用该对象的findall()方法在文本中查找匹配项。由于我们使用了re.ASCII标志,所以只有ASCII字符集中的数字和字母被匹配到,而中文字符被忽略。因此,输出结果为['Hello',
'123'],而不包括'世界'这个中文字符。

re.S

🧾🧾 语法: re.DOTALL 或简写为 re.S

🧾🧾 作用: DOT表示.,ALL表示所有,连起来就是.匹配所有,包括换行符\n。默认模式下.是不能匹配行符\n的。

re.DOTALL或简写为re.S是re模块的一个标志,用于指定正则表达式匹配时,"."符号是否能够匹配换行符。当re.DOTALL或re.S标志被设置时,"."符号将匹配任何字符,包括换行符。如果没有设置这个标志,"."符号将不匹配换行符。

以下是一个使用re.DOTALL标志的示例:

import re

text = 'hello\nworld'
pattern = re.compile('.*', re.DOTALL)
match = pattern.match(text)
print(match.group(0))

运行结果:

'hello\nworld'

可以看到,因为使用了re.DOTALL标志,"."符号匹配了换行符,所以整个文本都被匹配了。

需要注意的是,re.DOTALL标志只对"."符号起作用,其他的元字符和字符类仍然按照原来的规则匹配。
如果需要匹配包括换行符在内的所有字符,可以使用如下的正则表达式:

pattern = re.compile('.*', re.DOTALL | re.MULTILINE)
这里使用了re.MULTILINE标志,表示多行匹配,以便"."符号能够匹配换行符。

re.M

🧾 🧾 语法: re.MULTILINE 或简写为 re.M

🧾 🧾 含义: ==多行模式,当某字符串中有换行符\n,默认模式下是不支持换行符特性的,比如:行开头和行结尾,而多行模式下是支持匹配行开头的==。

在Python中,可以使用re模块中的re.MULTILINE标志来实现正则表达式的多行匹配。

例如,如果要匹配字符串apple,可以使用以下代码:


import re

pattern = re.compile('apple', re.MULTILINE)
text = 'The apple is red'

match = pattern.search(text)

if match:
    print(match.group())
else:
    print('未找到匹配的字符串')

运行结果:

image.png

在上面的代码中,re.MULTILINE标志被用来匹配字符串apple,这意味着可以在一行中匹配多个字符串。pattern.search(text)函数返回一个Match对象,如果找到匹配的字符串,则match.group()方法将被调用并打印出来,否则打印出未找到匹配的字符串。

注意:正则语法中^匹配行开头、\A匹配字符串开头,单行模式下它两效果一致,多行模式下\A不能识别\n。

re.X

🧾 🧾 语法: re.VERBOSE 或简写为 re.X

🧾 🧾 作用: 详细模式,可以在正则表达式中加注解!

re.VERBOSE 或简写为 re.X 是 re.compile()函数中的一个可选参数,用于在正则表达式中添加注释。它允许在正则表达式中使用空格、换行符和注释,从而使正则表达式更易于阅读和理解。

例如:

import re

# 匹配电子邮件地址
pattern = re.compile(r'''
    ^                   # 匹配字符串开头
    [\w\.\+\-]+         # 用户名,可以包含字母、数字、点、加号和减号
    @                   # @ 符号
    [\w\.\-]+           # 域名,可以包含字母、数字、点和减号
    \.                  # . 符号
    [a-zA-Z]{2,4}       # 域名后缀,可以是 2 到 4 个字母
    $                   # 匹配字符串结尾
''', re.VERBOSE)

# 测试正则表达式
print(pattern.match('john.doe+test@example.com'))

输出:

<re.Match object; span=(0, 27), match='john.doe+test@example.com'>

re.L

🧾 🧾 语法: re.LOCALE 或简写为 re.L

🧾 🧾 作用: ==由当前语言区域决定 \w, \W, \b, \B 和大小写敏感匹配,这个标记只能对byte样式有效,该标记官方已经不推荐使用,因为语言区域机制很不可靠,它一次只能处理一个 "习惯”,而且只对8位字节有效==。

re.LOCALE 或简写为 re.L 是 re.compile()函数中的一个可选参数,用于启用本地化匹配。它会根据当前系统的本地化设置,对正则表达式中的某些字符类别(如\w、\W、\b、\B)进行本地化处理,从而匹配更广泛的字符集

使用 re.LOCALE 可能会影响正则表达式的行为,因为它取决于系统的本地化设置。因此,如果需要编写可移植的正则表达式,最好不要使用 re.LOCALE。

以下是一个使用 re.LOCALE 的示例:

import re

# 匹配非字母数字字符
pattern = re.compile(r'\W+', re.LOCALE)

# 测试正则表达式
print(pattern.findall('Hello, 你好!'))

输出:

[',', '!']

re.U

🧾 🧾 语法: re.UNICODE 或简写为 re.U

🧾 🧾 作用: ==与 ASCII常量类似,匹配unicode编码支持的字符,但是Python3默认字符串已经是Unicode,所以显得有点多余==。

re.UNICODE 或简写为 re.U 是 re.compile() 函数中的一个可选参数,用于启用 Unicode
匹配模式。它会将正则表达式中的某些字符类别(如 \w、\W、\b、\B)扩展到 Unicode 字符集,从而匹配更广泛的字符集。

在 Python 3 中,默认情况下所有正则表达式都启用了 Unicode 匹配模式,所以在大多数情况下不需要使用 re.UNICODE。

以下是一个使用 re.UNICODE 的示例:

import re

# 匹配非字母数字字符
pattern = re.compile(r'\W+', re.UNICODE)

# 测试正则表达式
print(pattern.findall('Hello, 你好!'))

输出:

[',', '!']
相关文章
|
2月前
|
索引 Python
Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧
本文通过生动的“嫁接”比喻,讲解Python列表切片赋值操作。切片可修改原列表内容,实现头部、尾部或中间元素替换,支持不等长赋值,灵活实现列表结构更新。
130 1
|
3月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
743 19
|
3月前
|
数据采集 存储 JSON
使用Python获取1688商品详情的教程
本教程介绍如何使用Python爬取1688商品详情信息,涵盖环境配置、代码编写、数据处理及合法合规注意事项,助你快速掌握商品数据抓取与保存技巧。
|
5月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
5月前
|
XML Linux 区块链
Python提取Word表格数据教程(含.doc/.docx)
本文介绍了使用LibreOffice和python-docx库处理DOC文档表格的方法。首先需安装LibreOffice进行DOC到DOCX的格式转换,然后通过python-docx读取和修改表格数据。文中提供了详细的代码示例,包括格式转换函数、表格读取函数以及修改保存功能。该方法适用于Windows和Linux系统,解决了老旧DOC格式文档的处理难题,为需要处理历史文档的用户提供了实用解决方案。
521 1
|
4月前
|
并行计算 算法 Java
Python3解释器深度解析与实战教程:从源码到性能优化的全路径探索
Python解释器不止CPython,还包括PyPy、MicroPython、GraalVM等,各具特色,适用于不同场景。本文深入解析Python解释器的工作原理、内存管理机制、GIL限制及其优化策略,并介绍性能调优工具链及未来发展方向,助力开发者提升Python应用性能。
298 0
|
4月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
6月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
764 1
|
6月前
|
存储 算法 数据可视化
用Python开发猜数字游戏:从零开始的手把手教程
猜数字游戏是编程入门经典项目,涵盖变量、循环、条件判断等核心概念。玩家通过输入猜测电脑生成的随机数,程序给出提示直至猜中。项目从基础实现到功能扩展,逐步提升难度,适合各阶段Python学习者。
472 0

推荐镜像

更多