实际项目演示: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("上面方法未实现,此方法已实现")} } 接口实现 …

Codeforces Round 898 (Div. 4)

目录 A. Short Sort B. Good Kid C. Target Practice D. 1D Eraser E. Building an Aquarium F. Money Trees G. ABBC or BACB H. Mad City A. Short Sort 这种判断是否能变成目标串的我们都是通过一定手段然后看最后是否是直接变成目标串即可 void solve(){string s; …

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文件 编…

前段,关于Javascript的学习,数据类型

<html> <head> <title>Javascript Traning</title> <script> //注意Javascript里边的变量类型都用 var开头 var value "abc";//字符串类型 alert(value); var value110; var value210;//数字类型 alert(value2); //数字相加 aler…

中国地区cetos7.9 install kubeadmin

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

用Python库pillow处理图像

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

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

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

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

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

2024年Java基础面试题

2024年Java实战面试题&#xff08;北京&#xff09;_java 5 年 面试-CSDN博客 一、redis基础类型&#xff1a;string&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、sort set &#…