如何在 Python 中使用正则表达式 (Regex)
使用内置的 re 模块掌握 Python 正则表达式。学习字符串匹配、模式搜索、查找所有匹配项以及文本替换。
概述
正则表达式(通常称为 regex)是功能强大的模板,用于根据特定模式匹配、搜索和操作文本字符串。正则表达式广泛用于电子邮件验证、电话号码验证、网络抓取、日志解析以及搜索和替换文本任务。 Python 通过内置的“re”模块提供完整的正则表达式功能。
`re` 模块根据您的目标提供几个主要功能。 `re.search(pattern, string)` 函数扫描字符串并返回模式第一次出现的匹配对象。 `re.match(pattern, string)` 函数类似,但仅从字符串的开头进行搜索。如果要检索文本块中模式的所有实例,`re.findall(pattern, string)` 将它们作为字符串列表返回。
正则表达式模式利用特殊的元字符,例如“\d”表示数字,“\w”表示字母数字字符,“+”表示一次或多次出现,“*”表示零次或多次出现。在 Python 中编写正则表达式时,标准做法是使用原始字符串文字(以 `r` 为前缀,例如 `r"\d+"`)以防止 Python 将反斜杠视为转义序列。
代码和执行输出
该脚本演示了验证格式结构、提取数字标记以及使用 re 模块替换匹配的模式。
regex_demo.py
在编辑器中尝试import re
# 1. Searching for a pattern in text
log_message = "ERROR: Connection timeout at 04:30:15 on port 8080"
pattern_port = r"port \d+"
match = re.search(pattern_port, log_message)
if match:
print("Found port pattern:", match.group())
# 2. Extracting all email addresses from a block of text
text = "Contact sales@pyrun.xyz or support@example.com for help."
pattern_email = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
emails = re.findall(pattern_email, text)
print("Extracted emails:", emails)
# 3. Replacing patterns using re.sub
date_string = "2026/05/25"
# Replace slashes with dashes
clean_date = re.sub(r"/", "-", date_string)
print("Replaced Date:", clean_date)端子输出
Found port pattern: port 8080
Extracted emails: ['sales@pyrun.xyz', 'support@example.com']
Replaced Date: 2026-05-25逐步实施
- 导入内置的 re 模块。
- 使用原始字符串定义正则表达式搜索模式,例如 r"\d+" 以避免转义序列问题。
- 使用 re.search() 查找第一个匹配项,或使用 re.findall() 收集所有匹配的子字符串。
- 使用 re.sub(pattern, replacement, string) 在文本内执行基于模式的替换。
常见问题解答
对正则表达式模式使用原始字符串 (r"...") 有什么好处?
原始字符串将反斜杠视为文字字符而不是转义字符。例如,r"\n" 表示反斜杠后跟“n”,而“\n”表示换行符。
如何检查正则表达式匹配是否成功?
re.search() 和 re.match() 如果成功则返回一个匹配对象,如果没有找到匹配则返回 None 。您应该使用条件语句检查结果(例如,if match:)。
相关主题
推荐的 Python 资源
通过相关的交互式教程、备忘单和代码比较来扩展您的知识。