13.2 常用正则表达式模式

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:

工💗重💗hao💗:野老杂谈

⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.

⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。

⭐️ 全流程数据技术实战指南:全面讲解从数据采集到数据可视化的整个过程,掌握构建现代化数据平台和数据仓库的核心技术和方法。

⭐️ 构建全面的数据指标体系:通过深入的理论解析、详细的实操步骤和丰富的案例分析,为读者提供系统化的指导,帮助他们构建和应用数据指标体系,提升数据驱动的决策水平。

⭐️《遇见Python:初识、了解与热恋》 :涵盖了Python学习的基础知识、进阶技巧和实际应用案例,帮助读者从零开始逐步掌握Python的各个方面,并最终能够进行项目开发和解决实际问题。

摘要

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


1. 正则表达式简介

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

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

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

python 复制代码
import re

text = "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"的单词,可以用以下正则表达式:

python 复制代码
pattern = r"a"
text = "apple"
match = re.search(pattern, text)

if match:
    print("Found:", match.group())
字符集合

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

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

python 复制代码
pattern = r"[aeiou]"
text = "banana"
match = re.search(pattern, text)

if match:
    print("Found vowel:", match.group())
排除字符集合

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

python 复制代码
pattern = r"[^aeiou]"
text = "grape"
matches = re.findall(pattern, text)

print("Consonants:", matches)

3. 重复匹配

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

*+?

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

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

python 复制代码
pattern = r"ab*"
text = "abbb"
match = re.search(pattern, text)

if match:
    print("Match found:", match.group())
{n,m} 精确匹配

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

python 复制代码
pattern = r"a{2,4}"
text = "aaaaa"
matches = re.findall(pattern, text)

print("Matches:", matches)

4. 边界匹配

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

单词边界 \b

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

python 复制代码
pattern = r"\bword\b"
text = "a word in a sentence"
match = re.search(pattern, text)

if match:
    print("Exact word found:", match.group())
行首 ^ 和行尾 $

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

python 复制代码
pattern = r"^Hello"
text = "Hello, world!"
match = re.search(pattern, text)

if match:
    print("Starts with Hello")

5. 捕获组与反向引用

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

python 复制代码
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. 常见正则表达式模式示例

匹配邮箱地址
python 复制代码
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())
匹配电话号码
python 复制代码
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
python 复制代码
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())
匹配日期格式
python 复制代码
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. 总结

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


标签
  • 正则表达式
  • Python
  • 文本处理
  • 编程基础
  • 数据处理
相关推荐
一行玩python31 分钟前
SQLAlchemy,ORM的Python标杆!
开发语言·数据库·python·oracle
数据小爬虫@1 小时前
利用Python爬虫获取淘宝店铺详情
开发语言·爬虫·python
编程修仙2 小时前
Collections工具类
linux·windows·python
芝麻团坚果3 小时前
对subprocess启动的子进程使用VSCode python debugger
linux·ide·python·subprocess·vscode debugger
EterNity_TiMe_3 小时前
【论文复现】神经网络的公式推导与代码实现
人工智能·python·深度学习·神经网络·数据分析·特征分析
Stara05113 小时前
Git推送+拉去+uwsgi+Nginx服务器部署项目
git·python·mysql·nginx·gitee·github·uwsgi
hence..3 小时前
Vscode写markdown快速插入python代码
ide·vscode·python
DanielYQ4 小时前
LCR 001 两数相除
开发语言·python·算法
vener_5 小时前
LuckySheet协同编辑后端示例(Django+Channel,Websocket通信)
javascript·后端·python·websocket·django·luckysheet
封步宇AIGC5 小时前
量化交易系统开发-实时行情自动化交易-4.2.3.指数移动平均线实现
人工智能·python·机器学习·数据挖掘