13.3 正则表达式的应用

news2024/9/20 14:31:58

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

摘要

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

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

1. 正则表达式简介

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

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

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

2. 验证用户输入

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

验证电子邮件地址

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

import re

email_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.coloradmin.cn/o/1995657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 打包时候的分包

export default defineConfig({plugins: [vue()],resolve: {alias: {: fileURLToPath(new URL(./src/, import.meta.url))}},// 分包&#xff0c;node_modules中的单独打包成名字为vendor的js文件build: {rollupOptions: {manualChunks(id) {if (id.includes(node_modules)) {r…

汽车测试,引领国际

汽车测试及质量监控博览会&#xff08;中国&#xff09;(Testing Expo China 2024 - Automotive )是引领世界的领先国际展会&#xff0c;将于 2024 年 8 月 28-30日在上海世博展览馆举行。展示汽车测试、开发和验证技术的各个方面&#xff0c;每年在中国、欧洲和美国举办&#…

Openssh升级到>=9.6版本导致sftp不兼容的解决办法

因为要修复漏洞&#xff0c;所以得升级openssh&#xff0c;但从9.6开始&#xff0c;默认编译出来的openssh&#xff0c;无法兼容之前的sftp客户端了&#xff0c;大概的错误信息就是算法协商不一致。 解决办法其实也简单&#xff0c;就2步&#xff1a; 1. 编译的时候&#xff0c…

Linux学习记录(五)-------三类读写函数

文章目录 三种读写函数1.行缓存2.无缓存3.全缓存4.fgets和fputs5.gets和puts 三种读写函数 1.行缓存 遇到新行&#xff08;\n&#xff09;,或者写满缓存时&#xff0c;即调用系统函数 读&#xff1a;fgets,gets,printf,fprintf,sprintf写&#xff1a;fputs,puts,scanf 2.无缓…

Flink Checkpoint expired before completing解决方法

在Flink消费Kafka日志的时候出现了这样的一则报错&#xff0c; JobManager报错如下&#xff1a; 2024-03-07 15:21:12,500 [Checkpoint Timer] WARN org.apache.flink.runtime.checkpoint.CheckpointFailureManager [] - Failed to trigger or complete checkpoint 181 for …

面试官:怎样设计一个分布式任务调度平台?

大家好&#xff0c;我是君哥。 在工作中&#xff0c;批量任务调度的需求经常会遇到&#xff0c;比如下面的几个场景&#xff1a; 数据迁移&#xff1a;从数据库 A 批量读取数据&#xff0c;加工后把数据写入数据库 B&#xff1b; 消息通知&#xff1a;运营商批量给客户发送短…

宠物空气净化器什么牌子好?希喂、美的测评推荐

家里养了两只猫&#xff0c;每天晚上和我入眠&#xff0c;早上睡醒过来就看到猫睡在我身边&#xff0c;这一刻幸福感爆棚。幸福感爆棚的同时&#xff0c;无力感也袭来。主要是因为虽然每天玩得都很开心&#xff0c;但是家里的变化让我不禁感慨这是真实存在的吗。一回到家就会发…

【Material-UI】Checkbox组件:受控模式详解

文章目录 一、什么是受控组件&#xff1f;二、受控模式的基本用法1. 核心概念2. 代码分析 三、受控组件的优势与应用场景1. 确保数据的一致性2. 简化复杂的表单逻辑3. 轻松实现状态回显 四、受控模式的最佳实践1. 状态管理2. 优化性能3. 处理异步数据 五、结论 在Web开发中&…

【数据结构-前缀哈希】力扣3026. 最大好子数组和

给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个 子数组 中&#xff0c;第一个元素和最后一个元素 差的绝对值恰好 为 k &#xff0c;我们称这个子数组为 好 的。换句话说&#xff0c;如果子数组 nums[i…j] 满足 |nums[i] - nums[j]| k &#xff0c;那么…

如何通过AquilaInsight快速查看每天有哪些异常/慢查询?

友情链接&#xff1a; AquilaInsight核心功能及角色概览Aquila的核心功能介绍DBA Service的核心功能介绍刚部署好Aquila Insight&#xff0c;第一次如何使用如何通过Aquila Insight快速定位一个查询为什么慢&#xff1f;Aquila 添加自定义监控信息和告警的示例当Quark/Incepto…

[器械财讯]威高血液净化:中国血液透析市场的领军企业冲刺IPO

一、IPO冲刺&#xff1a;威高血净迎来新进展 山东威高血液净化制品股份有限公司&#xff08;以下简称“威高血净”&#xff09;在2023年12月30日正式启动IPO后&#xff0c;于2024年8月2日迎来新进展&#xff0c;其审核状态在上海证券交易所更新为“已问询”。尽管2024年医药行…

没有获取淘宝API的资质怎么获取淘宝数据

淘宝是头部电商平台之一&#xff0c;每个自研商家或电商软件服务商想要开发电商管理功能模板就少不了要对接淘宝API。淘宝API是在淘宝开放平台提供的&#xff0c;自研商家和软件服务商接入淘宝开放平台需要经过一系列审核和申请流程&#xff0c;要求资质和相关资料符合对应的要…

Windows下,C# 通过FastDDS高效通信

目录 1、安装FastDDS 库2、使用IDL定义自己的数据格式3、生成DLL3.1 托管 &#xff08;Managed&#xff09;模式3.2 非托管 &#xff08;Unmanaged&#xff09;模式 -- 可用于Unity 代码示例 eprosima Fast DDS is a C implementation of the DDS (Data Distribution Service) …

【面试八股文】软件测试面试题汇总

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有…

bug: 配置flyway.locations多个脚本位置不生效

文章目录 业务场景场景一场景二 业务场景 随着项目版本迭代&#xff0c;数据库结构也会变动。如果一个项目引用其他项目的jar包&#xff0c;并且需要执行对应jar包的flyway脚本&#xff0c;就需要配置flyway.locations 场景一 正常情况下&#xff0c;在一个项目中可以在yml文件…

【亲测有效!】ubuntu20.04和Centos7离线安装docker及nvidia-container-toolkit

【亲测有效&#xff01;】ubuntu20.04和Centos7离线安装docker及nvidia-container-toolkit 一、Ubuntu20.04安装docker&#xff08;1&#xff09;查看当前系统版本号和名称&#xff08;2&#xff09;在镜像源进行源文件下载&#xff08;3&#xff09;命令行进行安装&#xff08…

Mindspore框架利用扩散模型DDPM生成高分辨率图像|(三)模型训练与推理实践

利用扩散模型DDPM生成高分辨率图像&#xff08;生成高保真图像项目实践&#xff09; Mindspore框架利用扩散模型DDPM生成高分辨率图像|&#xff08;一&#xff09;关于denoising diffusion probabilistic model &#xff08;DDPM&#xff09;模型 Mindspore框架利用扩散模型DD…

告别杂音,从 AI 音频降噪开始

生活中&#xff0c;音频无处不在。无论是聆听动人的音乐&#xff0c;还是参与重要的电话会议&#xff0c;又或是沉浸于精彩的网课学习&#xff0c;清晰、纯净的音频质量都至关重要。然而&#xff0c;音频中的噪声却像不速之客&#xff0c;扰乱着这份美好。 音频中的噪声形式多样…

封装一个给 .NET Framework 用的内存缓存帮助类

前言 .NET Core 中已经内置了内存缓存相关的类和操作方法&#xff0c;直接就能使用&#xff0c;非常方便。但在 .NET Framework 中&#xff0c;如果想要使用内存缓存&#xff0c;需要自己进行封装。本文分享一个我自己项目中封装的内存缓存帮助类&#xff0c;有需要的童鞋可以…

前端已经学会vue,做粒子效果

目录 1. Canvas API 2. WebGL 3. 粒子系统 4. 动画与性能优化 5. 现有库和框架 6. Vue 组件和状态管理 实践项目建议 案例1 案例2雪花 已经熟悉了 Vue、TypeScript 和 JavaScript&#xff0c;下面是一些你可以学习的内容&#xff0c;以帮助你实现粒子效果的界面&#…