实际项目演示:Python RegEx在数据处理中的应用!

更多资料获取

📚 个人网站:ipengtao.com


正则表达式(Regular Expressions,简称 RegEx)是一种强大的文本匹配和搜索工具,它在数据处理、文本解析和字符串操作中发挥着关键作用。Python 提供了内置的 re 模块,用于处理正则表达式,能够进行高级的模式匹配和搜索。本文将深入探讨 Python 中的正则表达式,包括基本语法、常用函数和高级应用。

什么是正则表达式?

正则表达式是一种用于匹配字符串的模式,它由一系列字符和特殊符号组成,用于定义搜索模式。

正则表达式可以用于:

  • 检查字符串是否符合特定格式
  • 从文本中提取信息
  • 替换文本中的字符串
  • 过滤文本中的数据

正则表达式的基本语法

1. 基本字符匹配

  • 字符匹配:普通字符会与自身匹配。例如,正则表达式 cat 将匹配字符串中的 cat
  • 点号(.):匹配除换行符外的任何单个字符。例如,正则表达式 c.t 可以匹配 catcutcot
  • 字符集合([]):用于匹配字符中的一个字符。例如,正则表达式 [aeiou] 可以匹配任何元音字母。
  • 范围(-):用于定义字符集合的范围。例如,正则表达式 [a-z] 可以匹配任何小写字母。
  • 反向字符集合([^]):用于匹配字符集合之外的任何字符。例如,正则表达式 [^0-9] 可以匹配任何非数字字符。

2. 重复和数量限定符

  • 星号(*):匹配前一个字符零次或多次。例如,正则表达式 ca*t 可以匹配 ctcatcaat 等。
  • 加号(+):匹配前一个字符一次或多次。例如,正则表达式 ca+t 可以匹配 catcaat 等,但不能匹配 ct
  • 问号(?):匹配前一个字符零次或一次。例如,正则表达式 ca?t 可以匹配 ctcat
  • 花括号({m,n}):匹配前一个字符至少 m 次,最多 n 次。例如,正则表达式 ca{2,4}t 可以匹配 caatcaaatcaaaat

3. 特殊字符

正则表达式中有一些特殊字符,它们具有特殊的含义:

  • 反斜杠(\):用于转义特殊字符。例如,\. 匹配点号,而 \\ 匹配反斜杠本身。
  • 开始锚点(^):匹配字符串的开头。
  • 结束锚点($):匹配字符串的结尾。
  • 单词边界锚点(\b):匹配单词的边界。例如,\bword\b 可以匹配 word,但不匹配 wordskeyword

Python 中的re 模块

Python 中的 re 模块提供了一组函数,用于执行正则表达式操作。

以下是一些常用的函数:

  • re.match(pattern, string):从字符串的开头开始匹配,如果匹配成功返回一个匹配对象,否则返回 None
  • re.search(pattern, string):在字符串中搜索匹配项,如果找到任何匹配项则返回一个匹配对象,否则返回 None
  • re.findall(pattern, string):返回字符串中所有与模式匹配的项的列表。
  • re.finditer(pattern, string):返回一个迭代器,迭代器中的每个元素都是一个匹配对象。
  • re.split(pattern, string):根据模式的匹配项拆分字符串,并返回拆分后的列表。
  • re.sub(pattern, replacement, string):使用替换字符串替换模式的匹配项,并返回新字符串。

示例:基本匹配

import re# 使用 re.match() 匹配字符串开头的模式
pattern = r"hello"
string = "hello world"
match = re.match(pattern, string)
if match:print("Match found:", match.group())
else:print("Match not found")# 使用 re.search() 搜索字符串中的模式
pattern = r"world"
string = "hello world"
search = re.search(pattern, string)
if search:print("Search found:", search.group())
else:print("Search not found")

在上述示例中,使用 re.match()re.search() 函数分别查找了模式 "hello""world" 是否存在于字符串中。 matchsearch 都返回匹配对象,可以使用 group() 方法获取匹配的文本。

示例:字符集合和范围

import re# 使用字符集合匹配元音字母
pattern = r"[aeiou]"
string = "hello world"
matches = re.findall(pattern, string)
print("Vowels:", matches)# 使用范围匹配小写字母
pattern = r"[a-z]"
string = "Hello World"
matches = re.findall(pattern, string, re.IGNORECASE)  # 忽略大小写
print("Lowercase letters:", matches)

在这两个示例中,使用字符集合匹配元音字母和范围匹配小写字母。re.IGNORECASE 标志用于忽略大小写。

示例:数量限定符

import re# 使用 * 匹配零次或多次
pattern = r"ca*t"
strings = ["ct", "cat", "caat", "cot", "cut"]
for string in strings:if re.match(pattern, string):print("Match found for", string)# 使用 + 匹配一次或多次
pattern = r"ca+t"
strings = ["ct", "cat", "caat", "cot", "cut"]
for string in strings:if re.match(pattern, string):print("Match found for", string)# 使用 ? 匹配零次或一次
pattern = r"ca?t"
strings = ["ct", "cat", "caat", "cot", "cut"]
for string in strings:if re.match(pattern, string):print("Match found for", string)# 使用 {m,n} 匹配特定次数范围
pattern = r"ca{2,4}t"
strings = ["cat", "caat", "caaat", "caaaat", "ct", "cut"]
for string in strings:if re.match(pattern, string):print("Match found for", string)

在这些示例中,使用 *+?{m,n} 来匹配不同次数的字符。

示例:特殊字符和锚点

import re# 使用反斜杠转义特殊字符
pattern = r"\."
string = "www.example.com"
match = re.search(pattern, string)
if match:print("Dot found:", match.group())# 使用开始锚点匹配字符串开头
pattern = r"^Hello"
strings = ["Hello world", "Hi Hello"]
for string in strings:if re.match(pattern, string):print("Match found for", string)# 使用结束锚点匹配字符串结尾
```python
pattern = r"world$"
strings = ["Hello world", "world peace"]
for string in strings:if re.search(pattern, string):print("Match found for", string)# 使用单词边界锚点匹配单词边界
pattern = r"\bword\b"
strings = ["word", "words", "keyword"]
for string in strings:if re.search(pattern, string):print("Match found for", string)

在这些示例中,演示了如何使用反斜杠转义特殊字符,以及如何使用开始锚点、结束锚点和单词边界锚点来匹配特定的位置。

示例:使用 re.findall() 提取信息

import re# 提取所有邮箱地址
text = "Email me at john@example.com or jane@example.net"
pattern = r"\S+@\S+"
matches = re.findall(pattern, text)
print("Email addresses:", matches)

在这个示例中,使用正则表达式 r"\S+@\S+" 来提取文本中的邮箱地址。\S+ 匹配非空白字符,@ 匹配 “@” 符号,再次跟着 \S+ 匹配非空白字符,这样就可以提取出所有的邮箱地址。

示例:使用 re.sub() 替换文本

import re# 替换文本中的日期
text = "Today is 2022-12-25. Tomorrow is 2022-12-26."
pattern = r"\d{4}-\d{2}-\d{2}"
replacement = "YYYY-MM-DD"
new_text = re.sub(pattern, replacement, text)
print("Modified text:", new_text)

在这个示例中,使用正则表达式 r"\d{4}-\d{2}-\d{2}" 匹配日期格式(例如 2022-12-25),然后使用 "YYYY-MM-DD" 替换所有匹配的日期。

总结

正则表达式是处理文本数据的强大工具,Python 的 re 模块使其在编程中易于使用。本文介绍了正则表达式的基本语法和常见函数,并提供了示例代码,希望能帮助大家更好地理解和使用正则表达式,从而处理文本数据的各种需求。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

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

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

相关文章

C++模板函数

类型推断 模板在编译过程中,会进行类型推断,平时使用到隐式类型转换(自动类型转换),在类型推断时,几乎全部失效。经常用到的隐式类型转换包含以下几种: 从低精度类型到高精度类型的转换&#x…

IDEA新建项目,但是Spring Initializr最低17

目录 问题解决 问题 在IDEA中新建项目,使用Spring Initializr的方式,但是java版本只有17和21 但是它高任它高,我只搞Java8 解决 替换源,即更换Server URL,改为https://start.aliyun.com 然后就可以用Java8 了

CTFHub:web-LD_PRELOAD-WP

解题思路 思路分析 根据资料可得知有四种绕过 disable_functions 的手法: 攻击后端组件,寻找存在命令注入的 web 应用常用的后端组件,如,ImageMagick 的魔图漏洞、bash 的破壳漏洞等等寻找未禁用的漏网函数,常见的执…

【数据结构】(二)线性表List

目录 1、基本概念 2、栈(Stack) 3、队列(Queue) 4、串(String) 1、基本概念 (1)线性表是零或多个数据元素的有限序列。 (2)数组长度指存储空间长度&…

Kotlin快速入门系列6

Kotlin的接口与扩展 接口 与Java类似,Kotlin使用interface关键字定义接口,同时允许方法有默认实现: interface KtInterfaceTest {fun method()fun methodGo(){println("上面方法未实现,此方法已实现")} } 接口实现 …

JS第一课简单看看这是啥东西

1.什么是JavaScript JS是一门编程语言,是一种运行在客户端(浏览器)的编程语言,主要是让前端的画面动起来,注意HTML和CSS不是编程语言,他俩是一种标记语言。JS只要有浏览器就能运行不用跟Python或者Java一样上来装一个jdk或者Pyth…

12306提示人证核验失败问题解决方案

问题环境:手机已经 Root 并且安装了其他软件 认证时提示 官方客服回复: 可能是我的人脸发生了太大变化导致,建议我去身份证的公安部门更新人脸信息,但是想一想又不对,如果发生了大变化所有 App 使用的都是统一的公安部的人脸信息…

探索数字经济:从基础到前沿的奇妙旅程

新一轮技术革命方兴未艾,特别是以人工智能、大数据、物联网等为代表的数字技术革命,催生了一系列新技术、新产业、新模式,深刻改变着世界经济面貌。数字经济已成为重组全球要素资源、重塑全球经济结构、改变全球竞争格局的关键力量。预估到20…

关于maven项目构建的解释

在Idea中使用模块化构建项目 项目介绍: sky-server依赖sky-pojo和sky-common,继承sky-take-outsky-pojo继承sky-take-outsky-common继承sky-take-out 由于Idea编译器自动识别引入的模块,所以在Idea中可以运行项目。 在Idea中使用maven打包…

Redis -- 背景知识

目录 特性 为啥Redis快? 应用场景 Redis不能做什么? Redis是在内存中存储数据的一个中间件,用作为数据库,也可以用作为缓存,在分布式中有很高的威望。 特性 In-memory data structures:在内存中存储数据key-val…

设计模式——职责链模式(Chain of Responsibility Pattern)

概述 职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为…

少儿编程 中国电子学会图形化编程2021年3月等级考试Scratch三级真题解析(选择题、判断题)

1.在《采矿》游戏中,当角色捡到黄金时财富值加1分,捡到钻石时财富值加2分,下面哪个程序实现这个功能? A: B: C: D: 2.设计一个和在20以内(包括20)的整数加法…

通过docker构建基于LNMP的WordPress项目

计划通过自定义网络模式,创建一个172.18.0.0/16网段 nginx:172.18.0.2:80 php:172.18.0.3:9000 mysql:172.18.0.4:3306 创建nginx的镜像 准备好nginx的安装包 准备nginx的网页目录和wordpress网站目录以及nginx.conf文件 编…

中国地区cetos7.9 install kubeadmin

第 1 步:禁用 SELinux(可选但推荐) 如何在 CentOS 7 上查找 SELinux 状态 sestatus另一种选择是运行以下 cat 命令: vi /etc/selinux/config SELINUXdisabled rebootcentos7 linux 安装k8s前下面操作的作用是? cat…

用Python库pillow处理图像

入门知识 颜色。如果你有使用颜料画画的经历,那么一定知道混合红、黄、蓝三种颜料可以得到其他的颜色,事实上这三种颜色就是美术中的三原色,它们是不能再分解的基本颜色。在计算机中,我们可以将红、绿、蓝三种色光以不同的比例叠加…

腾讯云云监控实践:使用云审计 CloudAudit SDK 精准管理腾讯云资源

文章目录 一、什么是腾讯云的操作审计 CloudAudit二、CloudAudit 有哪些优势三、CloudAudit 应用场景举例3.1 安全分析3.2 资源变更跟踪3.3 合规性审计 四、使用云审计 SDK 进行云监控4.1 安装环境包 PHP4.2 下载并解压云审计 PHP SDK4.3 创建的腾讯云持久证书(如果…

【添加公众号】CSDN官方指定推广功能

一、场景 二、说明 三、要求(其中之一) 三、实战 Stage 1:进入推广管理 Stage 2:申请推广 1、微信公众号推广 2、微信号推广 Stage 3:提交审核 Stage 4:查看结果 Stage 5:开启推广 S…

深度学习与神经网络pytorch版 2.3 线性代数

深度学习与神经网络pytorch版 2.3 线性代数 目录 深度学习与神经网络pytorch版 2.3 线性代数 1. 简介 2. 线性代数 2.3.1 标量 ​编辑2.3.2 向量 2.3.3 矩阵 2.3.4 张量及其性质 2.3.5 降维 2.3.6 非降维求和 2.3.7 点积 2.3.8 矩阵-向量积 2.3.9 矩阵-矩阵乘法 …

linux平台 LED情报板网关项目总结

LED情报板目前已经基本稳定 主要存在两个版本LED1.5 和LED2 两个版本的主要差别是 : 1.1.5的配置文件存在本地 2.0的存在平台 需要通过接口从平台获取 2.1.5的下发消息的时候需要同步返回 2.0的是异步返回,所以1.5的要尽可能完成 不然会导致发 布平台…

境外投资企业备案结果公开名录列表数据

境外投资企业备案结果公开名录列表数据 1、时间:更新至2023年10月16日 2、指标:境外投资企业_机构、境内投资者名称、投资国别地区 3、来源:商务部 4、指标解释 境外投资企业(机构)备案结果公开名录列表&#xff…