13.1 Python 正则表达式基础

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:
工💗重💗hao💗:野老杂谈
⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.
⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。
⭐️ 全流程数据技术实战指南:全面讲解从数据采集到数据可视化的整个过程,掌握构建现代化数据平台和数据仓库的核心技术和方法。
⭐️ 构建全面的数据指标体系:通过深入的理论解析、详细的实操步骤和丰富的案例分析,为读者提供系统化的指导,帮助他们构建和应用数据指标体系,提升数据驱动的决策水平。
⭐️《遇见Python:初识、了解与热恋》 :涵盖了Python学习的基础知识、进阶技巧和实际应用案例,帮助读者从零开始逐步掌握Python的各个方面,并最终能够进行项目开发和解决实际问题。

摘要

正则表达式(Regular Expressions)是编程世界中的“魔法咒语”,能够帮助我们轻松应对各种字符串匹配与处理任务。从简单的字母匹配到复杂的文本解析,正则表达式数据清洗、日志分析、文本处理等方面发挥了重要作用。本篇文章将以幽默生动的语言,从基础概念到实战应用,带你走进正则表达式的奇妙世界。

一、什么是正则表达式

在编程的旅程中,你是否曾有过这样的烦恼:如何在一堆乱七八糟的文本中找出某个特定的单词,或是替换掉所有的电话号码?别急,正则表达式就是为解决这种问题而生的。

简单来说,正则表达式就是一套用来匹配字符串的规则。就像我们生活中的“找茬游戏”一样,只不过正则表达式的“找茬”能力强得令人发指。

二、正则表达式的语法初探

1. 字符匹配

想象一下,你在大海捞针,而正则表达式字符匹配就是你的万能钩子。比如,你想找到所有的字母“A”,你只需要使用 A 这个字符即可。

python">import retext = "Apple is amazing!"
match = re.findall(r'A', text)
print(match)  # 输出: ['A']

看到了吧,这样就能轻松找到文本中的字母“A”了。

2. 通配符 .

如果你觉得字符匹配还不够强大,那就让我们来认识一下通配符 .。它可是个“万能钥匙”,能匹配任何单个字符。

python">import retext = "Cat, Bat, Mat"
match = re.findall(r'.at', text)
print(match)  # 输出: ['Cat', 'Bat', 'Mat']

在这个例子中,.at 匹配了所有以“at”结尾的单词,不管前面是“C”还是“B”还是“M”。

3. 字符集 []

字符集让你能够在一个集合中指定要匹配的字符。比如 [aeiou] 就能匹配所有的元音字母。

python">import retext = "Python is powerful!"
match = re.findall(r'[aeiou]', text)
print(match)  # 输出: ['o', 'i', 'o', 'e', 'u']
4. 重复匹配 *+?

正则表达式还有一些特殊的符号用来处理重复的字符匹配。我们来认识一下 *+?

  • * 表示前面的字符可以重复0次或多次。
  • + 表示前面的字符至少出现1次。
  • ? 表示前面的字符出现0次或1次。
python">import retext = "100 apples, 200 oranges, 300 bananas"
match = re.findall(r'\d+', text)
print(match)  # 输出: ['100', '200', '300']

在这个例子中,\d+ 匹配了所有连续的数字。

三、实战:一个常见的案例

1. 查找电子邮件地址

假设你有一堆文本,需要从中提取出所有的电子邮件地址。使用正则表达式,这简直是小菜一碟。

python">import retext = "Contact us at info@example.com or support@domain.org"
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text)
print(emails)  # 输出: ['info@example.com', 'support@domain.org']

解释一下,这个看似复杂的正则表达式,其实只是由多个字符集和符号组合而成,用于匹配一个标准的电子邮件地址。

2. 替换电话号码

有时候,我们需要将文本中的电话号码替换为星号,保护隐私。这也可以通过正则表达式轻松完成。

python">import retext = "Call me at 123-456-7890 or 987-654-3210"
masked = re.sub(r'\d{3}-\d{3}-\d{4}', '***-***-****', text)
print(masked)  # 输出: Call me at ***-***-**** or ***-***-****
3. 数据清洗

正则表达式数据清洗方面也是利器。比如你需要从文本中删除所有的 HTML 标签,可以使用如下的正则表达式

python">import rehtml = "<html><head><title>Title</title></head><body><h1>Heading</h1></body></html>"
clean_text = re.sub(r'<.*?>', '', html)
print(clean_text)  # 输出: TitleHeading

四、正则表达式的坑与解决方案

正则表达式虽然强大,但也有不少坑。如果你在编写正则表达式时犯了错误,可能会导致你的匹配结果偏离预期。这里有几个常见的坑与解决方案:

1. 贪婪匹配 vs 非贪婪匹配

默认情况下,正则表达式是贪婪的,即它会尽可能多地匹配字符。如果你只想匹配最少的字符,可以使用非贪婪匹配,方法是在量词后面加上 ?

python">import retext = "<div>Content</div><div>More content</div>"
matches = re.findall(r'<div>.*?</div>', text)
print(matches)  # 输出: ['<div>Content</div>', '<div>More content</div>']
2. 多行文本匹配

当你要处理多行文本时,需要特别注意正则表达式的处理方式。例如,使用 re.M 模式来匹配多行的开始或结束符。

python">import retext = "First line\nSecond line\nThird line"
matches = re.findall(r'^\w+', text, re.M)
print(matches)  # 输出: ['First', 'Second', 'Third']

五、正则表达式工具推荐

正则表达式不容易,但好在有许多工具可以帮助我们编写和调试正则表达式

1. 在线工具

推荐使用 regex101 这类在线工具,它不仅能实时显示你的正则表达式匹配结果,还能对每个符号进行解释。

2. 集成开发环境 (IDE) 支持

许多 IDE,如 PyCharm、VSCode,都内置了正则表达式的调试功能,极大地简化了编写过程。

结语

正则表达式是编程中一项非常有用的技能,尽管起初看起来有点复杂,但一旦掌握了这些规则,就会发现它在文本处理中的强大威力。希望通过这篇文章,你已经对正则表达式的基础有了清晰的认识,并且能在实际项目中灵活运用。


标签

在这里插入图片描述


http://www.ppmy.cn/news/1508635.html

相关文章

苹果发布 AirPods Pro 2 测试版固件 搭配iOS 18新特性

苹果今天发布了AirPods Pro 2 的第三个测试版固件&#xff0c;包括 Lightning 和 USB-C 两个版本。更新后的固件版本号为 7A5266c&#xff0c;高于 7A5244b&#xff0c;目前可供开发者使用。这是苹果公司自 6 月份宣布 AirPods Pro 2 新功能以来发布的第三个固件更新。 作为iOS…

git拉取后,代码不见了,没有冲突覆盖,且,没有删除,看我是怎么找回的

git拉取后&#xff0c;代码不见了&#xff0c;没有冲突覆盖&#xff0c;且&#xff0c;没有删除 重点提醒 当你的代码丢失时&#xff0c;不要惊慌&#xff0c;首先尝试使用本地的历史记录和远程仓库来找回代码。如果这些方法不起作用&#xff0c;你可以考虑其他的救援工具或寻…

搭建高可用OpenStack(Queen版)集群(十)之部署分布式存储Ceph

一、Ceph知识点学习 Ceph知识点学习&#xff1a;https://www.cnblogs.com/happy-king/p/9207509.html 二、部署分布式存储Ceph 一&#xff09;设置yum源 在全部控制与计算节点设置epel与ceph yum源 epel源&#xff1a;repo安装包下载_开源镜像站-阿里云 ceph源&#xff1a;cep…

在亚马逊云科技上利用生成式AI开发用户广告营销平台

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何利用亚马逊云科技大模型托…

windows 版本Jenkins的Jenkinsfile中共享变量

场景 jenkins部署在windows服务器上的&#xff0c;需要在Jenkinsfile中获取命令执行的结果存入一个变量&#xff0c;然后在后续的执行中使用此变量 一开始想的是定义一个环境变量&#xff0c;如下所示&#xff0c; pipeline {agent anystages {stage(test) {steps {bat for /…

【网络】传输层TCP协议的报头和传输机制

目录 引言 报头和有效载荷 确认应答机制 超时重传机制 排序和去重 连接管理机制 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 TCP是传输层协议&#xff0c;全称传输控制协议。TCP报头中有丰富的字段以及协议本身会制定完善的策略来保证网络传输的可靠性。 TCP…

VIMA: General Robot Manipulation with Multimodal Prompts

发表时间&#xff1a;arXiv 2024年5月15日 论文链接&#xff1a;https://arxiv.org/pdf/2309.11499 作者单位&#xff1a;Xi’an Jiaotong University Motivation&#xff1a;机器人技术中的任务规范有多种形式&#xff0c;例如模仿一次性演示、遵循语言说明和达到目标。它们…

运动耳机哪个品牌好用?五款质量一流品牌推荐!

运动耳机无疑是运动爱好者的绝佳伴侣&#xff0c;让每一次挥汗如雨的瞬间都伴随着无与伦比的音乐盛宴与舒适的佩戴感受。特别是对于跑步爱好者而言&#xff0c;一款优秀的运动耳机更是不可或缺的装备。然而&#xff0c;市场上的运动耳机种类繁多&#xff0c;质量也千差万别&…

机器学习——逻辑回归(学习笔记)

目录 一、认识逻辑回归 二、二元逻辑回归&#xff08;LogisticRegression&#xff09; 1. 损失函数 2. 正则化 3. 梯度下降 4. 二元回归与多元回归 三、sklearn中的逻辑回归&#xff08;自查&#xff09; 1. 分类 2. 参数列表 3. 属性列表 4. 接口列表 四、逻辑回归…

怎么在网站底部添加站点地图?

在优化网站 SEO 时&#xff0c;站点地图&#xff08;Sitemap&#xff09;是一个非常重要的工具。它帮助搜索引擎更好地理解和抓取您的网站内容。幸运的是&#xff0c;从 WordPress 5.5 开始&#xff0c;WordPress 自带了站点地图生成功能&#xff0c;无需额外插件。下面将介绍如…

EPIC 数据库 Chronicles 的连接方式

EPIC 使用的是 IRIS 数据库&#xff0c;但是在 EPIC 内部&#xff0c;却有一个称为 Chronicles 的系统。 有关这个 Chronicles 的连接方式&#xff0c;请参考&#xff1a; Chronicles Chronicles 在 EPIC 内部被称为 DBMS&#xff0c;是 EPIC 的数据库管理系统。 我们可以认…

TDengine Cloud 助力智源未来,引领能源管理革新

在全球能源转型的大背景下&#xff0c;能源管理和储能技术的创新成为了各行业关注的焦点。随着能源需求的不断增加和对可再生能源的广泛应用&#xff0c;企业对高效、智能的能源管理解决方案的需求也在迅速增长。储能技术不仅能够平衡电力供应与需求&#xff0c;还能够在电网高…

如何高效记录并整理编程学习笔记?

如何高效记录并整理编程学习笔记&#xff1f; 笔记工具选择 1、Typora 轻量化&#xff0c;简单好用 2、 飞书云文档 手机电脑都可以看&#xff0c;随时同步笔记。 笔记结构设计 做好清晰的标题&#xff0c;按照知识去分类。 Java基础知识 开源框架 中间件 实践与复习策略 只…

10、java程序流程控制之二:分支语句(switch-case结构)、循环结构(for循环)(经典案例)

java程序流程控制之二&#xff1a; Ⅰ、分支语句&#xff1a;switch-case1、switch-case 分支结构&#xff1a;其一、描述&#xff1a;其二、代码为&#xff1a;其三、截图为&#xff1a; 2、switch-case 分支结构的案例1&#xff1a;判断是否合格其一、描述&#xff1a;其二、…

HC32F460 IIC访问总结

IC 总线由一根时钟线&#xff08; SCL&#xff09;&#xff0c;一根数据线&#xff08; SDA&#xff09;构成。所有的连接器件必须是漏 极开路输出。 SCL&#xff0c; SDA 线外接上拉电阻。电阻阻值取决于系统应用。 通常情况下&#xff0c;一个完整的通信过程包括下列 4 部分&…

人类的信仰从何而来?

原创 Kirill Nikitine 新发现科普书单 自人类诞生伊始&#xff0c;就不乏热衷于这个哲学基本问题的人士。基于近 15 个世纪以来多名伟大思想家发起的研究&#xff0c;科学家终于给出了答案。究其原因&#xff0c;人类学、神经学和文化因素促使人类拥有信仰。 在蒂姆・伯顿&…

执行start-dfs.sh后,datenode没有启动的最全解决办法(全网最全)

前言 在Hadoop中申请一个Flink的Session会话的时候出现了报错 报错内容 File /user/.flink/application_1723473994699_0002b/flink-table-api-java-uber-1.17.0.jar could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node…

docker stop pause 区别

先说区别 &#x1f6d1; docker stop &#xff1a;通过发送 SIGTERM 信号来停止正在运行的容器&#xff0c;如果容器在宽限期后仍未停止&#xff0c;则发送 SIGKILL 信号。这将完全停止容器的进程。 ⏸️ docker pause &#xff1a;使用 cgroups 冻结器暂停正在运行的容器中的…

理解 Objective-C 中 +load 方法的执行顺序

在 Objective-C 中&#xff0c;load 方法是在类或分类&#xff08;category&#xff09;被加载到内存时调用的。它的执行顺序非常严格&#xff0c;并且在应用启动过程中可能会导致一些令人困惑的行为。理解 load 方法的执行顺序对调试和控制应用的初始化过程非常重要。 load 方…

CVE-2024-38077:Windows远程桌面授权服务的‘隐形杀手’——深度剖析与紧急防护策略

文章目录 CVE-2024-38077&#xff1a;Windows远程桌面授权服务的‘隐形杀手’——深度剖析与紧急防护策略1 漏洞描述2 漏洞影响2.1 处置优先级&#xff1a;高2.2 影响版本 3 漏洞检测3.1 漏洞检测工具3.2 漏洞检测工具使用介绍3.2.1 漏洞检测工具当前支持三种方式检测3.2.2 漏洞…