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

news2024/11/15 11:08:35

更多资料获取

📚 个人网站: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.coloradmin.cn/o/1420779.html

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

相关文章

DevOps落地笔记-01|追溯本源:DevOps的发展历史回顾

任何事物的诞生、发展和消亡都是由所处社会阶段决定的,软件开发方法也是一样。现在我们津津乐道的 DevOps,也有其自己的起源和诞生的前提条件,今天我带领你追本溯源,一起找一找 DevOps 兴起的历史根源。 当谈到 DevOps&#xff0…

kafka集群搭建需要做的事情

首先,虚拟机克隆好之后的步骤如下: 1. 修改IP、主机名,关闭防火墙;(reboot重启) 2. 在/etc/hosts文件中进行IP与主机名的映射配置,集群中每天都记得配置; 3. 安装JDK并进行分发&a…

3种JWT验证和续签的策略

3 种JWT验证和续签的策略 好文推荐:一文教你搞定所有前端鉴权与后端鉴权方案,让你不再迷惘 - 掘金 (juejin.cn) 3 种jwt 验证的策略 通过解析去验证:每次访问api时parse jwt 判断是否vaild jwt有效 正常调用api jwt无效 返回401 缺点&a…

字符串和格式化输入/输出

本文参考C Primerf Plus进行C语言学习 文章目录 使用scanf() 从scanf()角度看输入格式字符串中的普通字符scanf()的返回值 1.使用scanf() 如果用scanf()读取基本变量类型的值,在变量名前加上一个&;如果用scanf()把字符串读入字符数组中,不要使用&am…

Kotlin快速入门系列6

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

提升编程效率的利器: 解析Google Guava库之集合篇RangeSet范围集合(五)

在编程中,我们经常需要处理各种范围集合,例如时间范围、数字范围等。传统的集合类库往往只能处理离散的元素集合,对于范围集合的处理则显得力不从心。为了解决这个问题,Google的Guava库提供了一种强大的数据结构——RangeSet&…

【JLU】校园网linux客户端运行方法

终于给这输入法整好了,就像上面图里那样执行命令就行 写一个开机自启的脚本会更方便,每次都运行也挺烦的 补充了一键运行脚本,文件路径$DIR需要自己修改 #!/bin/bash DIR"/home/d0/ubuntu-drclient-64/DrClient" run_per_prog&qu…

微信小程序上传时报错message:Error: 系统错误,错误码:80051,source size 2148KB exceed max limit 2MB

问题: 微信小程序上传时错误码:80051,source size 2248KB exceed max limit 2MB 问题原因: 由于代码中的静态资源 图片大小超了200k以及主包的体积超出1.5M 解决办法 分包 tabBar 是主包的,不需要分包处理,以下是分…

0130-2-秋招面试—HTML篇

2023 HTML面试题 1.src和href的区别 scr用于替换当前元素&#xff0c;href用于在当前文档和外部资源之间建立联系。 <script src"main.js"></script><link href"style.css" rel"stylesheet" />2.对HTML语义化的理解 根据内…

Linux:重定向

Linux&#xff1a;重定向 输出重定向追加重定向输出重定向与追加重定向的本质输入重定向 输出重定向 在Linux中&#xff0c;输出重定向是一种将命令的输出发送到不同位置的方法。通常&#xff0c;执行命令时&#xff0c;输出会显示在终端上。然而&#xff0c;使用输出重定向&a…

5-1 A. DS串应用--KMP算法

题目描述 学习KMP算法&#xff0c;给出主串和模式串&#xff0c;求模式串在主串的位置 算法框架如下&#xff0c;仅供参考 输入 第一个输入t&#xff0c;表示有t个实例 第二行输入第1个实例的主串&#xff0c;第三行输入第1个实例的模式串 以此类推 输入样例&#xff1a; 3 qwe…

产品经理的发展方向是什么?市场需求现状如何?未来有哪些趋势?作为产品经理应该如何准备?

目录 了解产品经理的发展方向 市场需求现状 未来有那些趋势&#xff1f; 作为产品经理应该作何准备? 了解产品经理的发展方向 市场需求现状 未来有那些趋势&#xff1f; 个人软件 &#xff1a;智能终端&#xff0c;轻量化应用&#xff0c;虚拟社交等企业软件&#xff1a…

用GoLand写一个小玩意-git定时push、commit

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 背景 有时候你想刷一刷github的commit墙&#xff0c;或者公司需要每天提交代码&#xff0c;你想摸鱼。就有这么一个小需求&#xff0c;想要自动commit、push代码…

solr的原理是什么

1 Java程序里如果有无限for循环的代码导致CPU负载超高&#xff0c;如何排查&#xff1f; 排查Java程序中由于无限循环导致的CPU负载过高的问题&#xff0c;可以按照以下步骤进行&#xff1a; 资源监控&#xff1a; 使用系统命令行工具&#xff08;如Linux上的top或htop&#xf…

Arrays.asList()方法调用add()或remove()抛出java.lang.UnsupportedOperationException问题

在使用Arrays.asList方法将以,分割的字符串转为list集合时&#xff0c;调用add和remove等方法时会抛出java.lang.UnsupportedOperationException。以下为原因和解决方法。 原因&#xff1a; Arrays.asList()方法返回了一个Arrays类的一个继承了AbstractList的ArrayList内部类…

富文本编辑器CKEditor4简单使用-03(图片上传)

富文本编辑器CKEditor4简单使用-03&#xff08;图片上传&#xff09; 1. 前言1.1 关于CKEditor4的安装及简单使用1.2 关于CKEditor4的插件安装及使用1.3 关于Easy Image 2. CKEditor4自带的默认上传图片按钮功能3. 使用增强的图像插件3.1 什么是增强的图像插件3.2 下载并安装增…

jdk17新特性—— instanceof的模式匹配

目录 一、instanceof模式匹配的概述二、instanceof模式匹配代码示例2.1、jdk17之前 instanceof用法 代码示例2.2、jdk17及之后 instanceof用法 代码示例一2.3、jdk17及之后 instanceof用法 代码示例二 一、instanceof模式匹配的概述 instanceof增加了模式匹配功能&#xff0c;…

vue3之echarts3D环柱图-间隔版

vue3之echarts3D环柱图-间隔版 效果&#xff1a; 版本 "echarts": "^5.4.1", "echarts-gl": "^2.0.9" 核心代码&#xff1a; <template><div class"content"><div ref"eCharts" class"c…

分享4款不能错过的修改照片尺寸的软件!

在当今这个数字化时代&#xff0c;照片已经成为我们分享生活、表达观点的重要方式。但是&#xff0c;你是否曾遇到过这样的问题&#xff1a;一张精美的照片因为尺寸不合适而无法在朋友圈中展现出最佳效果&#xff1f;不用担心&#xff0c;今天我们就来聊聊那些可以帮助你轻松修…

Day02-课后练习2-参考答案(数据类型和运算符)

文章目录 巩固题1、案例&#xff1a;今天是周2&#xff0c;100天以后是周几&#xff1f;2、案例&#xff1a;求三个整数x,y,z中的最大值3、案例&#xff1a;判断今年是否是闰年4、分析如下代码的计算结果5、分析如下代码的计算结果6、分析如下代码的计算结果7、分析如下代码的计…