Python 正则表达式进阶用法:字符集与字符范围详解

news/2024/12/28 20:35:45/文章来源:https://www.cnblogs.com/gdutxiaoxu/p/18637912

Python 正则表达式进阶用法:字符集与字符范围详解

正则表达式是文本处理和数据清洗中不可或缺的工具。在前面的学习中,我们已经了解了基本的正则表达式匹配,如匹配单个字符、字符串开始和结束的位置等。今天,我们将进入正则表达式的一个进阶主题:字符集(Character Set)和字符范围(Character Range)

这两个概念是正则表达式强大匹配功能的基石。掌握它们后,您能够更高效地处理各种文本模式,进行更复杂的数据匹配和清洗。

一、字符集(Character Set)的概念

字符集(Character Set)是正则表达式中用于匹配特定一组字符的集合。字符集可以包含多个字符,也可以使用特殊的字符类来匹配一组常见的字符。

字符集的基本形式是将字符放入一对方括号 [] 中。例如,[abc] 匹配字符 abc 中的任意一个。字符集是正则表达式中非常常见且重要的组成部分。

示例:简单的字符集匹配

假设我们有一个字符串 text = "apple banana cherry", 并且我们希望匹配所有包含字母 abc 的单词:

import retext = "apple banana cherry"
pattern = r"\b[abc]\w*\b"  # 匹配以 a, b, c 开头的单词
matches = re.findall(pattern, text)print(matches)

在这个例子中:

  • \b 表示单词边界,确保我们匹配的是完整的单词。
  • [abc] 是字符集,表示我们要匹配的字符可以是 abc 中的任意一个。
  • \w* 匹配单词字符(字母、数字和下划线),* 表示匹配零次或多次。

输出结果:

['apple', 'banana', 'cherry']

这里的正则表达式成功地找到了所有以 abc 开头的单词。

字符集中的特殊字符

字符集不仅限于字母和数字,还可以使用一些特殊字符来匹配特定类型的字符。例如:

  • \d:匹配任何数字,相当于 [0-9]
  • \w:匹配任何字母、数字或下划线,相当于 [a-zA-Z0-9_]
  • \s:匹配任何空白字符(如空格、制表符等)。
  • .:匹配除换行符外的任何单个字符。

示例:匹配包含数字的单词

如果我们想从文本中匹配包含数字的单词,可以使用 \d 来匹配数字:

text = "apple 123banana cherry 4567"
pattern = r"\b\w*\d\w*\b"  # 匹配包含数字的单词
matches = re.findall(pattern, text)print(matches)

输出结果:

['123banana', '4567']

在这个例子中,[abc] 被替换为 \d 来匹配包含数字的单词。

二、字符范围(Character Range)的概念

字符范围(Character Range)是正则表达式中用于表示一个连续字符集合的方式。它使用连字符 - 来指定一个字符范围。例如,[a-z] 匹配小写字母的任意一个字符。

示例:匹配小写字母

如果我们要匹配文本中的小写字母,可以使用字符范围 [a-z]

import retext = "apple Banana Cherry"
pattern = r"[a-z]"  # 匹配所有的小写字母
matches = re.findall(pattern, text)print(matches)

输出结果:

['a', 'p', 'p', 'l', 'e', 'a', 'n', 'a', 'b', 'a', 'n', 'a']

在这个例子中,正则表达式 [a-z] 匹配了所有的小写字母,包括 aple 等。

字符范围的组合

字符范围不仅限于单一范围,还可以组合多个范围来匹配不同类型的字符。例如,[a-zA-Z] 匹配所有的字母,无论是小写还是大写。

text = "apple Banana Cherry 123"
pattern = r"[a-zA-Z]"  # 匹配所有字母(包括大小写)
matches = re.findall(pattern, text)print(matches)

输出结果:

['a', 'p', 'p', 'l', 'e', 'B', 'a', 'n', 'a', 'n', 'a', 'C', 'h', 'e', 'r', 'r', 'y']

示例:匹配小写字母、数字和下划线

我们可以使用 \w 来匹配字母、数字和下划线,它等同于 [a-zA-Z0-9_]

text = "apple_123 Banana Cherry_456 789"
pattern = r"\w+"  # 匹配字母、数字和下划线组成的单词
matches = re.findall(pattern, text)print(matches)

输出结果:

['apple_123', 'Banana', 'Cherry_456', '789']

在这个例子中,\w+ 匹配一个或多个字母、数字或下划线。

三、使用字符集和字符范围匹配复杂的模式

字符集和字符范围为正则表达式提供了强大的灵活性,能够帮助我们匹配更复杂的文本模式。接下来,我们将通过一些实际的例子,演示如何使用字符集和字符范围来匹配更复杂的字符串。

示例:匹配包含数字和字母的单词

假设我们有以下文本,并希望匹配包含字母和数字的单词:

text = "apple 123banana Cherry_456 789"
pattern = r"\b[a-zA-Z0-9_]+\b"  # 匹配包含字母、数字和下划线的单词
matches = re.findall(pattern, text)print(matches)

输出结果:

['apple', '123banana', 'Cherry_456', '789']

在这个例子中,\b[a-zA-Z0-9_]+\b 表示匹配由字母、数字和下划线组成的单词。

示例:匹配日期格式(yyyy-mm-dd)

假设我们有一个日期格式为 yyyy-mm-dd 的字符串,并且希望提取所有日期:

text = "Today is 2023-11-05, tomorrow is 2023-11-06."
pattern = r"\b\d{4}-\d{2}-\d{2}\b"  # 匹配日期格式
matches = re.findall(pattern, text)print(matches)

输出结果:

['2023-11-05', '2023-11-06']

在这个例子中,\d{4}-\d{2}-\d{2} 匹配由 4 位数字、2 位数字和 2 位数字组成的日期。

示例:匹配手机号

如果我们想从文本中提取手机号,可以使用字符集和字符范围来匹配符合格式的手机号。假设手机号的格式为 “(xxx) xxx-xxxx”:

text = "My number is (123) 456-7890 and your number is (987) 654-3210."
pattern = r"\(\d{3}\) \d{3}-\d{4}"  # 匹配手机号
matches = re.findall(pattern, text)print(matches)

输出结果:

['(123) 456-7890', '(987) 654-3210']

在这个例子中,\(\d{3}\) \d{3}-\d{4} 匹配括号中的三位数字和格式为 “xxx-xxxx” 的电话号码。

四、字符集和字符范围的注意事项

虽然字符集和字符范围是正则表达式非常强大的特性,但在使用时有一些注意事项需要了解:

  1. 字符集是贪婪的:如果没有使用 ^$ 来限制匹配的起始和结束位置,正则表达式会尽可能匹配更多的字符。
  2. 字符范围的顺序很重要:字符范围中的顺序会影响匹配的结果,例如,[a-zA-Z][A-Za-z] 都可以匹配字母,但如果定义的字符范围顺序不同,结果会有所不同。

五、总结

通过本文的讲解,我们深入了解了 Python 正则表达

式中的字符集和字符范围。这些进阶用法为我们提供了强大的匹配能力,可以应对各种复杂的文本处理任务。通过合理使用字符集和字符范围,我们能够高效地提取文本中的信息,进行数据清洗和转换。

在实际应用中,正则表达式的强大功能不仅限于这两个概念,还可以与其他高级特性如分组、反向引用等结合使用,从而实现更为复杂的文本匹配任务。掌握字符集和字符范围,将大大提高我们编写正则表达式的效率和准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860528.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何免费使用 Termius Pro 版?Termius 工具下载与破解教程

今天想和大家聊聊 Termius 工具,Termius的下载与Termius破解教程,一款跨平台的 SSH/SFTP 终端工具。它不仅功能强大,还特别适合需要频繁上传文件夹和进行远程管理的小伙伴。无论你是程序员、运维工程师,还是需要远程管理服务器的爱好者,这款工具都能成为你的得力助手!今天…

Python 正则表达式进阶用法:边界匹配

Python 正则表达式进阶用法:边界匹配 正则表达式是一种强大的工具,用于处理文本中的模式匹配。它广泛应用于文本查找、替换、数据清洗等任务。在学习了正则表达式的基础知识后,掌握更高级的用法将使得正则表达式的应用更加灵活。边界匹配(Boundary Matching)是正则表达式中…

java-BLOG3

一:前言知识点总结题目集7控制设备:引入了开关、分档调速器、连续调速器和互斥开关四种控制设备,重点在于理解这些设备的工作原理及其在电路中的作用。 受控设备:包括灯(白炽灯、日光灯)和风扇(吊扇、落地扇),以及新增的受控窗帘。主要考察学生对不同设备工作状态的理…

学习笔记 - 汉明码

汉明码属于一种具备纠错功能的线性分组码。 在数据传输时,受外界干扰影响,单个比特可能产生差错。汉明码借助添加的冗余监督位,依照特定规则精准判断出错比特位,进而完成纠正,确保信息恢复如初,宛如给数据披上一层“防护甲”,使其即便处于复杂环境,也能维持精准可靠,在…

学习笔记 - 摩斯电码

摩斯电码由美国人塞缪尔莫尔斯等人发明,仅用“”(点)与“-”(划)两种符号,按不同排列组合来代表英文字母、数字和标点。起初应用于有线电报,后应用到无线电通信,曾长期担任关键角色。如今,虽因通信技术革新而不再主流,但在业余无线电爱好者群体中依旧流行,紧急救援时…

2024第一届Solar杯应急响应挑战赛WP

对于一个只学了2个月的小白来说这种比赛难度还是太高了,还要沉淀一下QAQ 内存取证-1 题目描述 题目文件:SERVER-2008-20241220-162057 请找到rdp连接的跳板地址 flag格式 flag{1.1.1.1} 先imageinfo然后netscan F:\CTF软件合集\Misc杂项\隐写工具\取证类\volatility\Volatili…

App信息收集

引子:上一章主要介绍了信息收集中的Web信息收集,包括要收集什么信息、该怎样去做等内容。而本章则简单介绍一下当目标为App时该如何进行信息收集。由于本篇章为信息收集篇,因此很多内容笔者并没有深究(ps:其实是深究不明白),或许等一轮学完后再回头看时会明白很多吧。免…

基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印)PSO优化过程: PSO优化前后,模型训练对比: 数据预测对比: 误差回归对比: 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)LR = g1(1); NN1 = floor(g1…

软件工程我依然爱你

用一个词总结软工实践课程——Never forget!!!😚😚😚 前言现在是2024年12月27号下午4点,是我考完软件工程课程的四小时,也是我软工实践结束的第27天。我竟莫名对软件工程有点不舍,特别是我们倾注大量心血的项目——福小研,我愿称之为我心里最好的项目之一,或许它…

2024省选联测1

2024省选联测1题目来源: 2024省选联测1 \(T1\) HZTG5808. interval \(40pts\)原题: QOJ 1173. Knowledge Is..考虑按照左端点升序排序后反悔贪心。分别维护已经匹配的区间对和未被匹配的区间,若当前区间 \(a\) 可以和前面剩余的未被匹配的区间匹配则直接匹配;否则尝试找到一…

2024-2025-1 20241407《计算机基础与程序设计》第十四周学习总结

作业信息这个作业属于哪个课程 2024-2025-1计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十四周作业这个作业的目标 学习二进制文件和文本文件,文件的打开和关闭,顺序读写与随机读写,标准输入和输出及其重定向作业正文 本博客教材学习内容总结…

GraphMAE2(解码增强型掩码自监督图学习器)

GraphMAE2: A Decoding-Enhanced Masked Self-Supervised Graph Learner 解码增强型掩码自监督图学习器 背景 ​ 近年来,自监督学习(Self-supervised Learning,SSL)得到了广泛的探索,特别是生成式自监督学习在自然语言处理以及其他人工智能领域已经取得了新兴的成功,像…