Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain

6. Python 标准库

6.4 re 模块与正则表达式

正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的工具,用于匹配和处理文本。Python 通过 re 模块提供了对正则表达式的支持。本节将详细介绍 re 模块的使用方法以及正则表达式的基本语法和应用场景。

6.4.1 正则表达式基础

正则表达式是一种用于描述字符串模式的语法。通过使用特定的符号和规则,可以匹配、查找、替换或分割字符串。以下是一些常用的正则表达式元字符:

  • .:匹配任意单个字符(除了换行符)。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • *:匹配前面的字符零次或多次。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • {n}:匹配前面的字符恰好 n 次。
  • {n,}:匹配前面的字符至少 n 次。
  • {n,m}:匹配前面的字符至少 n 次,至多 m 次。
  • []:匹配括号内的任意一个字符。
  • |:表示“或”关系。
  • ():分组,用于捕获匹配的内容。
6.4.2 re 模块的常用函数

re 模块提供了多种函数来处理正则表达式,以下是常用的函数:

  • re.match(pattern, string):从字符串的开头匹配正则表达式。如果匹配成功,返回一个匹配对象;否则返回 None。
  • re.search(pattern, string):在字符串中搜索正则表达式的第一个匹配项。如果找到匹配项,返回一个匹配对象;否则返回 None。
  • re.findall(pattern, string):返回字符串中所有与正则表达式匹配的子串,以列表形式返回。
  • re.finditer(pattern, string):返回一个迭代器,包含所有匹配对象的匹配结果。
  • re.sub(pattern, repl, string):将字符串中所有匹配正则表达式的部分替换为指定的字符串 repl。
  • re.split(pattern, string):根据正则表达式匹配的部分分割字符串,返回分割后的列表。
6.4.3 正则表达式的分组与捕获

正则表达式中的分组使用圆括号 () 表示。分组不仅可以用于逻辑分组,还可以用于捕获匹配的内容。捕获的内容可以通过匹配对象的 group() 方法获取。

例如:

import re

text = "John: 30, Jane: 25"
pattern = r"(\w+): (\d+)"
matches = re.findall(pattern, text)

for name, age in matches:
    print(f"Name: {name}, Age: {age}")

输出结果为:

Name: John, Age: 30
Name: Jane, Age: 25
6.4.4 正则表达式的贪婪与非贪婪匹配

正则表达式默认是贪婪匹配的,即尽可能多地匹配字符。可以通过在量词后面加上 ? 来实现非贪婪匹配。

例如:

import re

text = "<div>content1</div><div>content2</div>"
pattern_greedy = r"<div>.*</div>"
pattern_non_greedy = r"<div>.*?</div>"

print(re.findall(pattern_greedy, text))  # 贪婪匹配
print(re.findall(pattern_non_greedy, text))  # 非贪婪匹配

输出结果为:

['<div>content1</div><div>content2</div>']
['<div>content1</div>', '<div>content2</div>']
6.4.5 正则表达式的常见应用场景

正则表达式在文本处理中有广泛的应用,以下是一些常见的场景:

  • 验证输入格式:如验证电子邮件地址、电话号码、日期格式等。
  • 提取信息:从文本中提取特定的信息,如 URL、IP 地址等。
  • 替换文本:将文本中的某些部分替换为其他内容。
  • 分割文本:根据特定的模式分割文本。
6.4.6 正则表达式的性能优化

虽然正则表达式功能强大,但在处理大量数据时可能会影响性能。以下是一些优化建议:

  • 避免过度使用贪婪匹配:贪婪匹配可能会导致回溯,影响性能。
  • 预编译正则表达式:如果同一个正则表达式需要多次使用,可以使用 re.compile() 预编译正则表达式,以提高效率。
  • 使用非捕获分组:如果不需要捕获分组内容,可以使用 (?:...) 来避免不必要的捕获操作。
6.4.7 示例代码

以下是一个使用 re 模块的完整示例,展示了如何从文本中提取电子邮件地址:

import re

text = "Contact us at support@example.com or sales@example.org for more information."
pattern = r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"

emails = re.findall(pattern, text)
print("Extracted emails:", emails)

输出结果为:

Extracted emails: ['support@example.com', 'sales@example.org']
6.4.8 总结

re 模块是 Python 中处理正则表达式的核心工具,掌握正则表达式的基本语法和 re 模块的常用函数,可以极大地提高文本处理的效率。通过合理使用正则表达式,可以解决许多复杂的文本匹配和提取问题。

Last Updated:: 3/17/25, 7:20 PM