以下使用 Python 的 re 模块演示正则表达式的寻找、匹配、替换、删除四种经典模式。每个案例包含代码和简要说明。
python
import re
# ------------------------------------------------------------
# 1. 寻找 (search / findall) -- 在文本中查找所有匹配的内容
# ------------------------------------------------------------
text = "我的邮箱是 zhangsan@example.com,备用邮箱是 lisi@test.cn。"
# 经典案例:查找所有邮箱地址
pattern = r'\b[\w.-]+@[\w.-]+\.\w+\b'
emails = re.findall(pattern, text)
print("寻找结果:", emails) # ['zhangsan@example.com', 'lisi@test.cn']
# ------------------------------------------------------------
# 2. 匹配 (match / fullmatch) -- 判断整个字符串是否符合某个格式
# ------------------------------------------------------------
phone = "138-1234-5678"
# 经典案例:匹配中国大陆手机号(简单版,忽略区号)
pattern = r'^1[3-9]\d-\d{4}-\d{4}$'
if re.fullmatch(pattern, phone): # fullmatch 要求从头到尾完全匹配
print("匹配成功:这是一个有效的手机号格式")
else:
print("匹配失败")
# 注意:match() 是从开头匹配,fullmatch() 要求整个字符串都匹配,更常用
# ------------------------------------------------------------
# 3. 替换 (sub) -- 将匹配的部分替换成其他内容
# ------------------------------------------------------------
sentence = "我日复一日地写代码,日复一日地调试。"
# 经典案例:替换敏感词或重复词组,例如将"日复一日"替换为"勤奋地"
pattern = r'日复一日'
new_sentence = re.sub(pattern, '勤奋地', sentence)
print("替换结果:", new_sentence) # 我勤奋地写代码,勤奋地调试。
# 更实用的例子:将日期格式从 YYYY-MM-DD 改为 DD/MM/YYYY
date_str = "2025-03-15, 2026-05-13"
pattern_date = r'(\d{4})-(\d{2})-(\d{2})'
replaced = re.sub(pattern_date, r'\3/\2/\1', date_str)
print("日期格式转换:", replaced) # 15/03/2025, 13/05/2026
# ------------------------------------------------------------
# 4. 删除 -- 本质是替换为空字符串
# ------------------------------------------------------------
dirty_text = "Hello, world! This has extra spaces."
# 经典案例:删除多余空格(多个空格变成一个空格,或直接删除)
pattern_space = r'\s+' # 匹配一个或多个空白字符
cleaned = re.sub(pattern_space, ' ', dirty_text).strip()
print("删除多余空格后:", cleaned) # Hello, world! This has extra spaces.
# 另一个经典案例:删除 HTML 标签
html = "<p>欢迎来到<b>正则表达式</b>世界!</p>"
no_tags = re.sub(r'<[^>]+>', '', html)
print("删除HTML标签后:", no_tags) # 欢迎来到正则表达式世界!
四种模式的核心函数总结
| 模式 | 核心函数 | 作用 |
|---|---|---|
| 寻找 | re.findall() |
返回所有非重叠匹配的列表 |
| 匹配 | re.fullmatch() |
判断整个字符串是否匹配模式 |
| 替换 | re.sub() |
将匹配部分替换为指定字符串 |
| 删除 | re.sub(pattern, '') |
将匹配部分替换为空字符串实现删除 |
这些案例覆盖了日常处理文本时最常用的正则表达式操作。