Python 正则表达式:使用 re 模块进行模式匹配

掌握 Python 中的正则表达式 (Regex)。学习使用内置 re 库搜索、匹配、拆分和替换字符串数据。

在编辑器中尝试

概述

正则表达式(通常缩写为 regex)是一种用于高级文本搜索、字符串匹配和操作的迷你语言。正则表达式允许您定义复杂的模式来搜索大量文本,而不是检查简单的字符串值。例如,查找文档中的所有电子邮件地址、电话号码或 URL 用正则表达式表达很简单,但使用普通字符串方法编写却非常复杂。

Python 通过“re”模块提供对正则表达式的内置支持。该模块包括关键函数,例如用于查找第一个匹配项的“re.search()”、用于以列表形式检索所有匹配子字符串的“re.findall()”以及用于迭代匹配对象的“re.finditer()”。每个匹配对象都提供元数据,例如匹配子字符串的确切开始和结束位置索引以及匹配文本本身。

正则表达式模式利用特殊的元字符:“\d”匹配任何数字,“\w”匹配字母数字字符,“+”匹配一个或多个重复,方括号“[...]”定义字符集。使用括号“(...)”分组允许您提取模式的特定部分。此外,“re.sub()”允许您搜索模式并将其替换为新字符串。尽管正则表达式的学习曲线很陡峭,但掌握它可以为您提供一个非常快速且多功能的文本处理工具。

代码和执行输出

使用 re 模块验证和提取电子邮件地址的组成部分。

import re

text = "Contact support at info@pyrun.xyz or developer@pyrun.xyz today."

# Pattern to match email addresses
email_pattern = r"([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})"

# Find all matches
emails = re.findall(email_pattern, text)
print("Emails found:")
for user, domain in emails:
    print(f"User: {user} | Domain: {domain}")

# Redacting emails using re.sub
redacted_text = re.sub(email_pattern, "[REDACTED]", text)
print(f"\nRedacted Text:\n{redacted_text}")
端子输出
Emails found:
User: info | Domain: pyrun.xyz
User: developer | Domain: pyrun.xyz

Redacted Text:
Contact support at [REDACTED] or [REDACTED] today.

逐步实施

  • 验证格式输入(电子邮件、电话、密码)
  • 解析服务器访问日志以获取状态代码
  • 从原始 HTML 和 Markdown 报告中抓取信息

常见问题解答

正则表达式模式中“r”前缀的意义是什么?

它表示“原始字符串”。原始字符串将反斜杠 (\) 视为文字字符而不是转义字符,从而避免与正则表达式通配符发生语法冲突。

re.match 和 re.search 有什么区别?

re.match 仅检查从字符串开头开始的匹配,而 re.search 扫描整个字符串以查找匹配。

相关主题

推荐的 Python 资源

通过相关的交互式教程、备忘单和代码比较来扩展您的知识。