Skip to content

🚀 正则表达式练习

正则表达式是Python中强大的文本处理工具!通过这组练习,你将能够熟练运用正则表达式来解决各种实际问题。准备好了吗?让我们开始吧!

📝 练习目标

  • 掌握正则表达式的基本语法和元字符
  • 学会使用Python的re模块进行字符串匹配和处理
  • 能够使用正则表达式解决实际的文本处理问题
  • 理解贪婪匹配与非贪婪匹配的区别
  • 掌握分组、预查等高级正则表达式技巧

🌱 基础练习

1. 安全的邮箱验证器

创建一个函数validate_email(email),使用正则表达式验证邮箱地址是否有效。一个有效的邮箱地址应该满足以下条件:

  • 用户名部分可以包含字母、数字、点、下划线、百分号、加号和连字符
  • 域名部分应该包含字母、数字、点和连字符
  • 顶级域名部分至少包含2个字符

示例:

python
validate_email("user@example.com")  # 返回 True
validate_email("invalid-email@")    # 返回 False

参考答案提示: 使用类似^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$这样的正则表达式模式。

2. 数字提取器

编写一个程序,从给定的文本中提取所有数字(包括整数和小数)。

示例:

python
extract_numbers("价格:99元,折扣:15.5元,总计:114.5元")  # 返回 [99, 15.5, 114.5]

参考答案提示: 使用re.findall()\d+(?:\.\d+)?这样的模式。

3. 替换敏感信息

编写一个函数,将文本中的所有手机号码替换为***-***-****格式。假设手机号码都是11位的数字。

示例:

python
mask_phone_numbers("联系电话:13812345678,备用电话:18687654321")  # 返回 "联系电话:***-***-****,备用电话:***-***-****"

参考答案提示: 使用re.sub()(\d{3})(\d{4})(\d{4})这样的分组模式。

4. 提取URL

编写一个函数,从给定的文本中提取所有的URL。假设URL都以http://https://开头。

示例:

python
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. 清理文本中的多余空格

编写一个函数,将文本中的多个连续空格(包括换行符、制表符等)替换为单个空格,并去除首尾的空格。

示例:

python
clean_text("  你好  \t世界!  \n  我是Python程序员。  ")  # 返回 "你好 世界! 我是Python程序员。"

参考答案提示: 使用re.sub()\s+这样的模式。

🚀 挑战练习

6. 密码强度检查器

编写一个函数check_password_strength(password),使用正则表达式检查密码强度。一个强密码应该满足以下条件:

  • 至少8个字符长度
  • 至少包含一个大写字母
  • 至少包含一个小写字母
  • 至少包含一个数字
  • 至少包含一个特殊字符(如!@#$%^&*等)

示例:

python
check_password_strength("Password123!")  # 返回 "强密码"
check_password_strength("weakpass")     # 返回 "弱密码:缺少数字、大写字母和特殊字符"

参考答案提示: 分别使用不同的正则表达式模式检查各个条件,然后组合结果。

7. HTML标签清理器

编写一个函数,移除HTML文本中的所有标签,只保留纯文本内容。

示例:

python
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

要求提取每条日志的时间戳、日志级别和消息内容,并将结果以字典列表的形式返回。

示例:

python
analyze_logs("log_file.txt")  # 返回 [{"timestamp": "2023-05-15 10:30:45", "level": "INFO", "message": "User login successful - user123"}, ...]

参考答案提示: 使用re.findall()和分组模式捕获各个部分。

💡 部分参考答案

1. 安全的邮箱验证器

python
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. 数字提取器

python
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. 替换敏感信息

python
import re

def mask_phone_numbers(text):
    pattern = r"(\\d{3})(\\d{4})(\\d{4})"
    return re.sub(pattern, "***-***-****", text)

4. 提取URL

python
import re

def extract_urls(text):
    pattern = r"https?://[a-zA-Z0-9.-]+(?:/[^\s]*)?"
    return re.findall(pattern, text)

5. 清理文本中的多余空格

python
import re

def clean_text(text):
    # 将多个空格替换为单个空格
    text = re.sub(r"\\s+", " ", text)
    # 去除首尾的空格
    return text.strip()

📚 扩展阅读

🎉 恭喜你完成了正则表达式的练习!正则表达式是一个强大的工具,通过不断练习,你会越来越熟练地运用它解决各种文本处理问题。如果遇到困难,不要忘了查阅文档或使用在线测试工具来调试你的正则表达式。继续加油! 💪

© 2025 技术博客. All rights reserved by 老周有AI