13.3 正则表达式的应用

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

摘要

正则表达式(Regular Expression)是一种强大的文本处理工具,广泛应用于数据清洗、验证输入、文本搜索和替换等任务中。本文将通过一系列生动有趣的实际例子,带你深入了解正则表达式在日常编程中的具体应用。无论你是处理网页数据、验证用户输入,还是进行批量文本替换,正则表达式都能为你提供高效、精准的解决方案。

目录
  1. 正则表达式简介
  2. 验证用户输入
    • 验证电子邮件地址
    • 验证电话号码
  3. 文本搜索与提取
    • 从网页提取信息
    • 匹配日期格式
  4. 文本替换
    • 批量替换敏感词
    • 标准化数据格式
  5. 数据清洗
    • 删除多余空白字符
    • 提取和清理日志文件
  6. 总结

1. 正则表达式简介

如果你曾经在海量的文本中寻找某个特定的单词,或者需要从一堆混乱的数据中提取出有用的信息,那么你就会发现正则表达式是一种无比高效的工具。正则表达式允许你定义复杂的模式来匹配和操作文本数据,简直像是一位无所不能的文本魔法师。

想象一下,你是一位古代的抄书匠,手里有一本满是错误和涂改的古籍,而你的任务是把其中的错误都挑出来并修正。正则表达式就像是你的魔法卷轴,能够帮你轻松地完成这个任务。

在 Python 中,我们使用 re 模块来处理正则表达式。让我们从一些简单的例子开始,看看正则表达式如何让你变成文本处理的高手。

2. 验证用户输入

在处理用户输入时,数据的格式正确性是首要考虑的。例如,用户提交的电子邮件地址和电话号码必须符合标准格式,否则可能导致数据处理出错。

验证电子邮件地址

验证电子邮件地址是一个典型的应用场景。正则表达式能够快速检查用户输入的邮箱是否有效:

import reemail_pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
email = "user@example.com"if re.fullmatch(email_pattern, email):print("Valid email address")
else:print("Invalid email address")

在这个例子中,我们定义了一个正则表达式模式来匹配常见的电子邮件地址格式。这个模式要求邮箱的用户名部分可以包含字母、数字、点号、下划线、百分号、加号和减号,而邮箱的域名部分则由字母和数字组成,最后以一个点号和两到四个字母的顶级域结尾。

验证电话号码

同样地,我们可以使用正则表达式来验证电话号码的格式:

phone_pattern = r"\b\d{3}[-.]?\d{3}[-.]?\d{4}\b"
phone_number = "123-456-7890"if re.fullmatch(phone_pattern, phone_number):print("Valid phone number")
else:print("Invalid phone number")

这个正则表达式模式允许匹配美国电话号码格式,它可以是带连字符或点的格式,也可以是没有分隔符的纯数字格式。

3. 文本搜索与提取

正则表达式在文本搜索和提取中也非常有用,特别是在从网页数据或日志文件中提取有用信息时。

从网页提取信息

假设你需要从一段 HTML 内容中提取所有的超链接(<a> 标签):

html_content = '''
<a href="https://www.example.com">Example</a>
<a href="https://www.test.com">Test</a>
'''links = re.findall(r'href="(https?://[^\"]+)"', html_content)
print("Extracted links:", links)

在这个例子中,正则表达式 href="(https?://[^\"]+)" 匹配所有的 href 属性,并提取其中的 URL。这里的 https? 表示匹配 httphttps,而 [^\"]+ 表示匹配任意数量的非双引号字符。

匹配日期格式

你可能需要从一段文本中提取所有的日期,例如格式为 YYYY-MM-DD 的日期:

text = "The event is scheduled for 2024-08-10 and the deadline is 2024-08-15."
dates = re.findall(r"\b\d{4}-\d{2}-\d{2}\b", text)
print("Found dates:", dates)

这个正则表达式模式 \b\d{4}-\d{2}-\d{2}\b 匹配由四位数字表示的年份、两位数字表示的月份和两位数字表示的日期。

4. 文本替换

正则表达式不仅可以查找和提取文本,还可以用来替换文本内容。例如,你可以使用它来进行批量的文本替换操作。

批量替换敏感词

假设你有一个文本文件,里面包含了一些敏感词汇,而你想要将这些词汇替换为 ***

text = "This is a secret message with sensitive information."
censored_text = re.sub(r"\bsecret\b|\bsensitive\b", "***", text)
print("Censored text:", censored_text)

在这个例子中,正则表达式 \bsecret\b|\bsensitive\b 匹配单词 secretsensitive,并将其替换为 ***

标准化数据格式

有时,你需要对数据格式进行标准化。例如,将一组电话号码格式化为统一的格式:

phone_numbers = ["1234567890", "123.456.7890", "123-456-7890"]
formatted_numbers = [re.sub(r"[^\d]", "-", number) for number in phone_numbers]
print("Formatted numbers:", formatted_numbers)

在这个例子中,正则表达式 "[^\d]" 匹配所有非数字字符,并将其替换为 -,使电话号码格式统一。

5. 数据清洗

数据清洗是数据科学中不可或缺的一步,正则表达式在删除多余字符和提取有用信息方面大显身手。

删除多余空白字符

你可能需要清理文本中的多余空白字符,使得文本内容更为整洁:

text = "This   is  an  example   text."
clean_text = re.sub(r"\s+", " ", text)
print("Cleaned text:", clean_text)

在这个例子中,\s+ 匹配一个或多个空白字符,并将它们替换为单个空格。

提取和清理日志文件

正则表达式也可以用于从日志文件中提取有用的信息,比如 IP 地址:

log = "User accessed from IP 192.168.1.1 on 2024-08-10"
ip_pattern = r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
ip_address = re.search(ip_pattern, log)if ip_address:print("Found IP address:", ip_address.group())

这个正则表达式模式 \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b 匹配常见的 IPv4 地址格式,并能从日志文件中提取这些地址。

6. 总结

正则表达式作为一种强大的工具,在文本处理和数据清洗中发挥了重要作用。本文介绍了一些常见的正则表达式应用场景,如用户输入验证、文本搜索与提取、文本替换和数据清洗。通过学习这些内容,你可以在实际工作中灵活运用正则表达式,提高代码的效率和准确性。


标签
  • 正则表达式
  • Python
  • 文本处理
  • 数据清洗
  • 编程技巧

在这里插入图片描述

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

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

相关文章

2024年6月scratch图形化编程等级考试三级真题

202406 青少年软件编程等级考试Scratch三级真题 试卷总分数&#xff1a;100分 考试时长&#xff1a;60 分钟 第 1 题 运行程序后&#xff0c;角色的x坐标是&#xff1f;&#xff08; &#xff09; A&#xff1a;99 B&#xff1a;100 C&#xff1a;199 D&#xff1a;200 正…

矩阵的导数运算

1. 标量方程对向量的导数 一维方程f(y)求极值即求导,令 二维方程f(y1,y2)求极值即求偏导,令 如果一个标量方程f(y1,y2,...ym)有m个自变量,求取它的极值就需要求取m组的方程组。当然可以用一种简洁的方式来表达它,比如二维方程f(y1,y2)可以把其中的变量写成向量的形式,此…

指针基础知识(笔记)

文章目录 1. 概念理解2. 空指针和野指针3. 计算4. 小结5. size_t6. 案例一: 指针查找并返回指定元素索引7. 指针访问多维数组(涉及 int (*ptr)[3]解析)8. 指针数组9. 函数的值传递与地址引用传递① 函数的值传递(pass by value)② 地址传递(pass by reference) 10. 案例二&…

C语言宠物系统

功能有增加宠物信息&#xff0c;显示宠物信息&#xff0c;删除宠物信息&#xff0c;修改功能和排序功能&#xff0c;可以选择姓名排序&#xff0c;年龄排序&#xff0c;价格排序。进阶的功能有文件操作&#xff0c;动态内存开辟。。 test.c源文件 #include "Pet.h"v…

机器人帮助文档

文章目录 机器交流使用群使用图例1. 查看机器人使用文档2. 直接问问题&#xff08;系统默认AI&#xff09;3. 系统默认AI切换4. 直接问问题&#xff08;指定讯飞星火AI&#xff09;5. 直接问问题&#xff08;指定百度文心AI&#xff09;6. 直接问问题&#xff08;指定谷歌AI&am…

代码随想录算法训练营Day34 | 62.不同路径 | 63. 不同路径 II | 343.整数拆分 | 96.不同的二叉搜索树

今日任务 62.不同路径 题目链接&#xff1a; https://leetcode.cn/problems/unique-paths/description/题目描述&#xff1a; Code class Solution { public:int uniquePaths(int m, int n) {// vector<vector<int>> memo(m, vector<int>(n, -1));// fu…

从0开始的1panel搭配雷池社区版保护网站

1.安装1panel 使用默认安装地址&#xff1a;/opt [1Panel Log]: 外网地址: http://xxxxx:35628/dc54fe6a54 [1Panel Log]: 内网地址: http://10.0.4.3:35628/dc54fe6a54 [1Panel Log]: 面板用户: root [1Panel Log]: 面板密码: xxxxx 安装完成第一次登陆 安装openresty&…

【原创】springboot+mysql法律咨询网设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

初学51单片机1602液晶时序图实例分析

上篇博文笔者分享了关于液晶1602基本的工作流程&#xff0c;本篇主要是通过逻辑分析仪来看一下程序使能的电平时序&#xff0c;是否符合产品文档给出 的时序逻辑。 先看一下1602的时序图 认识下时序图中各个标识的含义&#xff1a; Tc信号周期&#xff08;E Cycle Time&#x…

【解压既玩】PS3模拟器v0.0.32+战神3+战神升天+各存档 整合包 ,完美不死机,没有BUG,旷世神作,强力推荐

战神3是圣莫尼卡公司的大作&#xff0c;PS3 上必玩的游戏之一。 本文收集了战神3和升天两作&#xff0c;附存档&#xff0c;完美不死机&#xff0c;没有BUG&#xff0c;强烈推荐。 解压即玩。 立即下载&#xff1a;【chumenx.com】【解压既玩】PS3模拟器v0.0.32战神3战神升天…

Docker数据管理,数据卷,容器服务器数据卷

一、容器的数据管理介绍 1.1 Docker容器分层 Docker镜像由多个只读层叠加而成&#xff0c;启动容器时&#xff0c;Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果运行中的容器修改了现有的一个已经存在的文件&#xff0c;那该文件将会从读写层下面的只读层复制到…

Redis相关面试题(二)

一、Bit中不同命令使用的场景 二、什么是缓存击穿&#xff0c;缓存穿透&#xff0c;缓存雪崩&#xff1f; 缓存击穿&#xff1a;是指当某一个key的缓存过期时大并发量的请求同时访问key&#xff0c;瞬间击穿服务器直接访问到数据库&#xff0c;使得数据库处于负载情况 缓存穿透…

mysql8.4.2数据库做主从复制

linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包-CSDN博客文章浏览阅读472次&#xff0c;点赞7次&#xff0c;收藏4次。linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包https://blog.csdn.net/xikui1551/article/de…

C++的深拷贝和浅拷贝

浅拷贝是一种简单的拷贝方式&#xff0c;仅仅是复制对象的基本类型成员和指针成员的值&#xff0c;而不复制指针所指向的内存。这可能会导致两个对象共享相同的资源&#xff0c;从而引发潜在的问题&#xff0c;如内存泄漏、意外修改共享资源等。一般来说编译器默认帮我们实现的…

Openwrt配置ZeroTier,实现公网访问内网中服务器

ZeroTier注册&Openwrt初始配置 首先来到Openwrt的VPN→ZeroTier页面&#xff0c;进行一个很简单的注册 注册后去zerotier的网页管理页面进行一个很简单的创建网络 复制网络ID备用 在openwrt填写网络ID并启用。如果你需要访问内网主机勾上 自动客户端NAT 在zerotier网络管理…

十一、vector 类

Ⅰ . vector 的介绍和使用 01 vector 的介绍 vector 的文档介绍&#xff1a;vector ① vector 是表示可变大小数组的序列容器&#xff0c;既像数组&#xff0c;又不像数组 像体现在&#xff1a;同样采用连续存储空间存储元素&#xff0c;可以使用下标访问元素 不像体现在&…

大模型笔记5 Extractive QA任务评估

目录 Extractive QA任务评估 Extractive QA评测指标 precision, recall, f1 ROUGE 划分训练与评估数据集 token位置评估 单个token位置评估 输入label的token位置 预测token位置 评估 Wandb 共享机器同时登录 样本类别平衡 标记token label时对窗口进行筛选 训练…

IT运维岗适用的6本证书

作为IT从业人员&#xff0c;不断提升自身的专业技能和知识是提升职场竞争力、助力升职加薪的重要途径。特别是在运维领域&#xff0c;虽然工作看似简单&#xff0c;但实际上需要掌握的技术知识却相当全面。为了全面提升自己的技术能力&#xff0c;并证明自己的专业能力&#xf…

2024 年 7 月区块链游戏研报:市场波动与数据分化的挑战与机遇

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics 游戏研究页面 7 月份&#xff0c;加密货币市场波动显著&#xff0c;价格表现各异。比特币和 Solana 表现抢眼&#xff0c;与此同时&#xff0c;以太坊在美国市场推出现货以太坊…

Python酷库之旅-第三方库Pandas(073)

目录 一、用法精讲 296、pandas.Series.dt.as_unit方法 296-1、语法 296-2、参数 296-3、功能 296-4、返回值 296-5、说明 296-6、用法 296-6-1、数据准备 296-6-2、代码示例 296-6-3、结果输出 297、pandas.Series.dt.days属性 297-1、语法 297-2、参数 297-3、…