13.2 常用正则表达式模式

devtools/2024/9/24 6:00:55/

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

摘要

正则表达式听起来像是一种神秘的魔法,但它其实是处理文本的强大工具。本文将通过幽默生动的例子,带你认识一些常用的正则表达式模式。从简单的匹配单词到复杂的捕获组,正则表达式将不再让你头疼。通过这篇文章,你将掌握正则表达式的基本模式,并能够在实际项目中灵活运用。


1. 正则表达式简介

说到正则表达式,你的第一反应可能是“这是什么天书?”其实,正则表达式(regular expressions)是一种用来匹配字符串的模式,简单来说,它就像一个超级强大的搜索工具,能够帮你在一堆文本中快速找到你需要的内容。

想象一下,你在海边寻找一颗特别的贝壳,而正则表达式就是那个能够过滤掉所有其他贝壳的神奇筛子,直接帮你找到你想要的那颗。

Python 中,我们使用 re 模块来处理正则表达式。首先,让我们来看看如何导入这个模块并写一个简单的正则表达式

import retext = "Hello, world!"
pattern = r"world"
match = re.search(pattern, text)if match:print("Found:", match.group())
else:print("Not found")

在这个例子中,我们创建了一个模式 world,然后在字符串 Hello, world! 中搜索它。结果显然是“找到了!”。

2. 字符匹配

正则表达式最基础的功能就是匹配字符。理解字符匹配是掌握正则表达式的第一步。

单字符匹配

让我们从最简单的单字符匹配开始。想象一下你在超市里寻找苹果,正则表达式可以帮你精确定位它们。

比如,你想找一个包含字母“a”的单词,可以用以下正则表达式

pattern = r"a"
text = "apple"
match = re.search(pattern, text)if match:print("Found:", match.group())
字符集合

有时,我们需要匹配一组字符中的任意一个。这就好比你在找水果,不仅仅是苹果,香蕉、橙子也都可以。

我们可以使用 [] 来定义字符集合,比如:

pattern = r"[aeiou]"
text = "banana"
match = re.search(pattern, text)if match:print("Found vowel:", match.group())
排除字符集合

如果你不喜欢某些水果,比如葡萄干,你可以通过排除字符集合来避开它们:

pattern = r"[^aeiou]"
text = "grape"
matches = re.findall(pattern, text)print("Consonants:", matches)

3. 重复匹配

字符匹配是很有用,但有时你需要匹配多个字符或重复的字符。这时,正则表达式的重复匹配符号就派上用场了。

*+?

这些符号分别表示“零次或多次”、“一次或多次”以及“零次或一次”匹配。

举个例子,假设你要找一个“a”后面跟着任意数量的“b”的字符串:

pattern = r"ab*"
text = "abbb"
match = re.search(pattern, text)if match:print("Match found:", match.group())
{n,m} 精确匹配

如果你需要更精确的控制重复次数,{n,m} 是你的好帮手。它表示匹配前一个字符至少 n 次,至多 m 次。

pattern = r"a{2,4}"
text = "aaaaa"
matches = re.findall(pattern, text)print("Matches:", matches)

4. 边界匹配

正则表达式还可以匹配特定的位置,比如单词的边界或行的开头和结尾。

单词边界 \b

想要找到单词的确切位置?\b 就是你需要的。

pattern = r"\bword\b"
text = "a word in a sentence"
match = re.search(pattern, text)if match:print("Exact word found:", match.group())
行首 ^ 和行尾 $

如果你想找到某行的开头或结尾,使用 ^$ 是最简单的方法。

pattern = r"^Hello"
text = "Hello, world!"
match = re.search(pattern, text)if match:print("Starts with Hello")

5. 捕获组与反向引用

捕获组允许你在正则表达式中对一部分内容进行分组,以便在后续操作中使用。

pattern = r"(hello) (world)"
text = "hello world"
match = re.search(pattern, text)if match:print("Group 1:", match.group(1))print("Group 2:", match.group(2))

6. 常见正则表达式模式示例

匹配邮箱地址
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
text = "example@example.com"
match = re.search(pattern, text)if match:print("Valid email:", match.group())
匹配电话号码
pattern = r"\b\d{3}[-.]?\d{3}[-.]?\d{4}\b"
text = "123-456-7890"
match = re.search(pattern, text)if match:print("Valid phone number:", match.group())
匹配URL
pattern = r"https?://[a-zA-Z0-9.-]+(?:/[\w.-]*)*"
text = "https://www.example.com"
match = re.search(pattern, text)if match:print("Valid URL:", match.group())
匹配日期格式
pattern = r"\b\d{4}-\d{2}-\d{2}\b"
text = "2024-08-09"
match = re.search(pattern, text)if match:print("Valid date:", match.group())

7. 总结

正则表达式可能看起来复杂,但只要你掌握了基本模式,就会发现它是个非常有用的工具。本文介绍了一些常见的正则表达式模式,它们能帮助你在处理文本时事半功倍。下一次当你面对一堆数据需要筛选时,不妨试试用正则表达式,你会惊讶于它的强大。


标签

在这里插入图片描述


http://www.ppmy.cn/devtools/92470.html

相关文章

观测云对接 OpenTelemetry 最佳实践

观测云支持多种方式来接入 OpenTelemetry 上报的数据,比如通过 OpenTelemetry Collector ,也可以直接通过 exporter 方式上报。本次最佳实践主要通过 exporter 方式进行上报,架构如下: 免费开通观测云安装 DataKitDataKit 开启 op…

Spring统一处理请求响应与异常

在web开发中&#xff0c;规范所有请求响应类型&#xff0c;不管是对前端数据处理&#xff0c;还是后端统一数据解析都是非常重要的。今天我们简单的方式实现如何实现这一效果 实现方式 定义响应类型 public class ResponseResult<T> {private static final String SUC…

书生.浦江大模型实战训练营——(一)InternStudio+Vscode SSH连接远程服务器+Linux基础指令

最近在学习书生.浦江大模型实战训练营&#xff0c;所有课程都免费&#xff0c;以关卡的形式学习&#xff0c;也比较有意思&#xff0c;提供免费的算力实战&#xff0c;真的很不错&#xff08;无广&#xff09;&#xff01;欢迎大家一起学习&#xff0c;打开LLM探索大门&#xf…

Recyclerview网格布局学习备忘

网格分割线&#xff0c;网格布局代码&#xff1a; 两个链接构成完整代码&#xff1a; Android RecyclerView线性布局详解(1)_Android_脚本之家 (jb51.net) Android RecyclerView网格布局&#xff08;支持多种分割线&#xff09;详解(2)_Android_脚本之家 (jb51.net)

HCIA、OSPF笔记

一、OSI参考模型 1、OSI的结构 应用层&#xff1a;把人类语言转化成编码&#xff0c;为各种应用程序提供网络服务。 表示层&#xff1a;定义一些数据的格式&#xff0c;&#xff08;对数据进行加密、解密、编码、解码、压缩、解压缩&#xff0c;每一层都可以实现&#xff0c…

vue+elementui 表格分页限制最大页码数

vue3element-plus &#xff1a; 在组件里直接使用page-count属性&#xff0c;在获取数据的时候测试一下总条数/每页数量向上取整是否大于1000&#xff0c;是默认count为1000&#xff0c;否则使用计算后的值&#xff1b; vue2 elementui el-pagination &#xff1a;total与pag…

魔方远程时时获取短信内容APP 前端Vue 后端Ruoyi框架(含搭建教程)

前端Vue 后端Ruoyi框架 APP原生JAVA 全兼容至Android14(鸿蒙 澎湃等等) 前后端功能&#xff1a; ①后端可查看用户在线状态(归属地IP) ②发送短信(自定义输入收信号码以及短信内容&#xff0c;带发送记录) ③短信内容分类清晰(接收时间、上传时间等等) ④前后端分离以及A…

Linux Shell面试题大全及参考答案(3万字长文)

目录 解释Shell脚本是什么以及它的主要用途 主要用途 Shell脚本中的注释如何编写? 如何在Shell脚本中定义和使用变量? Shell支持哪些数据类型? 什么是Shell的命令替换?请举例说明。 管道(pipe)和重定向(redirection)有什么区别? 如何在Shell脚本中使用条件语句…