🚀 正则表达式练习
正则表达式是Python中强大的文本处理工具!通过这组练习,你将能够熟练运用正则表达式来解决各种实际问题。准备好了吗?让我们开始吧!
📝 练习目标
- 掌握正则表达式的基本语法和元字符
- 学会使用Python的
re模块进行字符串匹配和处理 - 能够使用正则表达式解决实际的文本处理问题
- 理解贪婪匹配与非贪婪匹配的区别
- 掌握分组、预查等高级正则表达式技巧
🌱 基础练习
1. 安全的邮箱验证器
创建一个函数validate_email(email),使用正则表达式验证邮箱地址是否有效。一个有效的邮箱地址应该满足以下条件:
- 用户名部分可以包含字母、数字、点、下划线、百分号、加号和连字符
- 域名部分应该包含字母、数字、点和连字符
- 顶级域名部分至少包含2个字符
示例:
validate_email("user@example.com") # 返回 True
validate_email("invalid-email@") # 返回 False参考答案提示: 使用类似^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$这样的正则表达式模式。
2. 数字提取器
编写一个程序,从给定的文本中提取所有数字(包括整数和小数)。
示例:
extract_numbers("价格:99元,折扣:15.5元,总计:114.5元") # 返回 [99, 15.5, 114.5]参考答案提示: 使用re.findall()和\d+(?:\.\d+)?这样的模式。
3. 替换敏感信息
编写一个函数,将文本中的所有手机号码替换为***-***-****格式。假设手机号码都是11位的数字。
示例:
mask_phone_numbers("联系电话:13812345678,备用电话:18687654321") # 返回 "联系电话:***-***-****,备用电话:***-***-****"参考答案提示: 使用re.sub()和(\d{3})(\d{4})(\d{4})这样的分组模式。
4. 提取URL
编写一个函数,从给定的文本中提取所有的URL。假设URL都以http://或https://开头。
示例:
extract_urls("访问我们的网站:https://www.example.com,或者查看文档:http://docs.test.org") # 返回 ["https://www.example.com", "http://docs.test.org"]参考答案提示: 使用re.findall()和https?://[a-zA-Z0-9.-]+(?:/[^\s]*)?这样的模式。
5. 清理文本中的多余空格
编写一个函数,将文本中的多个连续空格(包括换行符、制表符等)替换为单个空格,并去除首尾的空格。
示例:
clean_text(" 你好 \t世界! \n 我是Python程序员。 ") # 返回 "你好 世界! 我是Python程序员。"参考答案提示: 使用re.sub()和\s+这样的模式。
🚀 挑战练习
6. 密码强度检查器
编写一个函数check_password_strength(password),使用正则表达式检查密码强度。一个强密码应该满足以下条件:
- 至少8个字符长度
- 至少包含一个大写字母
- 至少包含一个小写字母
- 至少包含一个数字
- 至少包含一个特殊字符(如!@#$%^&*等)
示例:
check_password_strength("Password123!") # 返回 "强密码"
check_password_strength("weakpass") # 返回 "弱密码:缺少数字、大写字母和特殊字符"参考答案提示: 分别使用不同的正则表达式模式检查各个条件,然后组合结果。
7. HTML标签清理器
编写一个函数,移除HTML文本中的所有标签,只保留纯文本内容。
示例:
clean_html("<div><p>这是一个<strong>示例</strong>文本</p></div>") # 返回 "这是一个示例文本"参考答案提示: 使用re.sub()和<[^>]+>这样的模式。
8. 日志分析工具
编写一个程序,分析一个简单的日志文件,提取关键信息。日志格式如下:
[2023-05-15 10:30:45] INFO: User login successful - user123
[2023-05-15 10:31:20] ERROR: Database connection failed
[2023-05-15 10:32:10] WARNING: High memory usage detected要求提取每条日志的时间戳、日志级别和消息内容,并将结果以字典列表的形式返回。
示例:
analyze_logs("log_file.txt") # 返回 [{"timestamp": "2023-05-15 10:30:45", "level": "INFO", "message": "User login successful - user123"}, ...]参考答案提示: 使用re.findall()和分组模式捕获各个部分。
💡 部分参考答案
1. 安全的邮箱验证器
import re
def validate_email(email):
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
return bool(re.match(pattern, email))2. 数字提取器
import re
def extract_numbers(text):
pattern = r"\\d+(?:\\.\\d+)?"
matches = re.findall(pattern, text)
# 转换为数字类型
return [float(match) if '.' in match else int(match) for match in matches]3. 替换敏感信息
import re
def mask_phone_numbers(text):
pattern = r"(\\d{3})(\\d{4})(\\d{4})"
return re.sub(pattern, "***-***-****", text)4. 提取URL
import re
def extract_urls(text):
pattern = r"https?://[a-zA-Z0-9.-]+(?:/[^\s]*)?"
return re.findall(pattern, text)5. 清理文本中的多余空格
import re
def clean_text(text):
# 将多个空格替换为单个空格
text = re.sub(r"\\s+", " ", text)
# 去除首尾的空格
return text.strip()📚 扩展阅读
🎉 恭喜你完成了正则表达式的练习!正则表达式是一个强大的工具,通过不断练习,你会越来越熟练地运用它解决各种文本处理问题。如果遇到困难,不要忘了查阅文档或使用在线测试工具来调试你的正则表达式。继续加油! 💪




