当前位置:首页 > 技术 > 正文内容

Python 正则表达式完全指南

访客 技术 2026年7月4日 2

理解正则表达式基础

正则表达式(regex)是一种强大的文本处理工具,它使用特殊的字符序列定义搜索模式。这些模式可以用于执行各种字符串操作,包括文本匹配、替换和分割。

正则表达式的起源

正则表达式最早由数学家 Stephen Cole Kleene 在 20 世纪 50 年代提出,作为描述正则语言的一种数学符号。如今,它已成为程序员、数据分析师和 IT 专业人员必备的技能之一。

正则表达式的实际应用

正则表达式在众多领域都有广泛应用:

  • 数据验证:验证电子邮件、电话号码等格式
  • 网页数据提取:从 HTML 中解析和提取特定信息
  • 文本处理:查找并替换符合特定模式的文本
  • 代码编辑器:实现语法高亮功能
  • 自然语言处理:文本分词、词干提取等任务
  • 系统日志分析:提取关键信息并识别模式

Python 的 re 模块

Python 通过内置的 re 模块提供对正则表达式的支持。作为标准库的一部分,re 模块无需额外安装即可使用。

导入 re 模块

要在 Python 中使用正则表达式,首先需要导入 re 模块:

import re

导入后,我们就可以使用 re 模块提供的各种函数和类来处理正则表达式。

简单示例

假设我们需要在文本中查找所有出现的关键词"编程":

import re

# 示例文本
content = "Python 是一种强大的编程语言。编程可以让计算机按照我们的意图工作。"

# 查找所有"编程"的出现
results = re.findall("编程", content)

# 输出匹配结果
print(results)  # 输出: ['编程', '编程']

re 模块核心函数详解

re.match() - 从开头匹配

re.match() 函数检查字符串是否以特定模式开头。如果匹配成功,返回匹配对象;否则返回 None。

import re

# 定义模式
pattern = "Python"
text = "Python 是一门优秀的编程语言"

# 检查文本是否以"Python"开头
result = re.match(pattern, text)

# 输出结果
if result:
    print(f"匹配成功: {result.group()}")
else:
    print("未找到匹配")

re.search() - 全文搜索

与 re.match() 不同,re.search() 会扫描整个字符串查找匹配项。

import re

# 定义模式
pattern = "优秀"
text = "Python 是一门优秀的编程语言"

# 在文本中搜索"优秀"
result = re.search(pattern, text)

# 输出结果
if result:
    print(f"找到匹配: {result.group()}")
else:
    print("未找到匹配")

re.findall() - 查找所有匹配

该函数返回字符串中所有非重叠匹配的列表。

import re

# 定义模式
pattern = "编程"
text = "编程可以解决实际问题。编程需要不断学习和实践。"

# 查找所有"编程"
matches = re.findall(pattern, text)

# 输出匹配结果
print(matches)  # 输出: ['编程', '编程']

re.finditer() - 迭代器查找

与 re.findall() 类似,但返回一个包含匹配对象的迭代器。

import re

# 定义模式
pattern = "学习"
text = "学习编程需要耐心和持续的学习。"

# 查找所有"学习"及其位置
matches = re.finditer(pattern, text)

# 输出每个匹配的位置和内容
for match in matches:
    print(f"在位置 {match.start()} 找到: {match.group()}")

re.sub() - 文本替换

使用 re.sub() 可以将字符串中匹配的文本替换为指定内容。

import re

# 定义模式和替换文本
pattern = "Java"
replacement = "Python"
text = "我喜欢 Java。Java 是一种面向对象的语言。"

# 替换所有"Java"为"Python"
new_text = re.sub(pattern, replacement, text)

# 输出替换后的文本
print(new_text)  # 输出: "我喜欢 Python。Python 是一种面向对象的语言。"

总结

Python 的 re 模块提供了处理正则表达式的强大功能。通过掌握 match、search、findall、finditer 和 sub 等函数,我们可以高效地处理各种文本匹配和转换任务。正则表达式是每个程序员应该掌握的重要工具,能够大大提高文本处理的效率和准确性。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。