本文目录导读:

- 验证邮箱格式
- 提取网页链接中的域名
- 手机号脱敏(隐藏中间四位)
- 分割字符串并保留分隔符
- 查找所有十六进制颜色值
- 检测密码强度(至少包含数字、大写、小写、特殊字符)
- 替换字符串中的空格(包括全角、半角、连续多个)为单个空格
- 总结表
正则表达式(regex)在Python中主要通过re模块实现,以下列举几个经典且实用的案例,覆盖了提取、验证、替换和分割等常见场景。
验证邮箱格式
目标:检查一个字符串是否符合常见的邮箱格式。
import re
def is_valid_email(email):
# 常见邮箱正则:允许字母、数字、点、下划线、中划线,@后为域名
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return re.match(pattern, email) is not None
# 测试
emails = ['user@example.com', 'invalid-email', 'user@.com', 'user@sub.domain.com']
for e in emails:
print(f"{e}: {is_valid_email(e)}")
# 输出:
# user@example.com: True
# invalid-email: False
# user@.com: False
# user@sub.domain.com: True
提取网页链接中的域名
目标:从一段HTML或文本中提取所有的http/https链接,并获取其中的域名部分。
import re text = "访问 https://www.example.com/path 或 http://sub.domain.org/hello" # 匹配URL(简化版) url_pattern = r'https?://([a-zA-Z0-9.-]+)' matches = re.findall(url_pattern, text) print(matches) # 输出:['www.example.com', 'sub.domain.org']
手机号脱敏(隐藏中间四位)
目标:将字符串中的手机号(中国大陆11位)中间四位替换为。
import re
text = "我的手机是13812345678,联系他:13900001111"
# 分组捕获前三位和后四位,中间替换
masked = re.sub(r'1[3-9]\d{9}', lambda m: m.group()[:3] + '****' + m.group()[-4:], text)
print(masked) # 输出:我的手机是138****5678,联系他:139****1111
分割字符串并保留分隔符
目标:按标点符号分割句子,但保留分隔符在结果中。
import re text = "你好,世界!Python很棒。" # 使用括号捕获分隔符,split会保留捕获组 parts = re.split(r'([,!。])', text) print(parts) # 输出:['你好', ',', '世界', '!', 'Python很棒', '。', ''] # 注意最后一个空字符串是因为末尾分隔符后的子串 # 可以过滤空串 parts_filtered = [p for p in parts if p] print(parts_filtered) # ['你好', ',', '世界', '!', 'Python很棒', '。']
查找所有十六进制颜色值
目标:从CSS或HTML中找到所有#开头后跟6位或3位十六进制数字的颜色值。
import re
css_text = """
background-color: #ff5733;
color: #abc;
border: 1px solid #333333;
invalid: #ggg;
"""
# 匹配3或6位十六进制(不区分大小写)
pattern = r'#[0-9a-fA-F]{3}(?:[0-9a-fA-F]{3})?'
colors = re.findall(pattern, css_text)
print(colors) # 输出:['#ff5733', '#abc', '#333333']
检测密码强度(至少包含数字、大写、小写、特殊字符)
目标:检查密码是否满足安全要求(例如至少8位,含以上四种字符中的至少三种)。
import re
def password_strength(password):
# 分别检查各类字符是否存在
checks = {
'digit': bool(re.search(r'\d', password)),
'upper': bool(re.search(r'[A-Z]', password)),
'lower': bool(re.search(r'[a-z]', password)),
'special': bool(re.search(r'[!@#$%^&*(),.?":{}|<>]', password)),
'length': len(password) >= 8
}
score = sum(checks.values())
if score < 3:
return "弱"
elif score == 3:
return "中"
else:
return "强"
print(password_strength("abc123")) # 弱(长度不足)
print(password_strength("Pass123!")) # 强(4项满足)
print(password_strength("Abcdef1@")) # 强(4项满足)
替换字符串中的空格(包括全角、半角、连续多个)为单个空格
目标:标准化文本中的空白字符。
import re text = "Python 很棒, 但 Java 也不错。" normalized = re.sub(r'\s+', ' ', text).strip() print(normalized) # 输出:Python 很棒, 但 Java 也不错。 # 注意:全角空格属于Unicode空白,但仍会匹配 text2 = "你好 世界 !" # 含有全角空格 print(re.sub(r'\s+', ' ', text2)) # 输出:你好 世界 !
总结表
| 案例 | 核心模式 | 用途 |
|---|---|---|
| 邮箱验证 | ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ |
格式校验 |
| 提取域名 | https?://([a-zA-Z0-9.-]+) |
信息提取 |
| 手机号脱敏 | 1[3-9]\d{9} + lambda |
数据脱敏 |
| 分割保留分隔符 | 文本解析 | |
| 十六进制颜色 | #[0-9a-fA-F]{3}(?:[0-9a-fA-F]{3})? |
数据匹配 |
| 密码强度 | 联合多个re.search |
安全检查 |
| 空白归一化 | \s+ -> |
文本清洗 |
这些案例展示了正则表达式在验证、提取、替换、分割四大领域的典型用法,实际使用时注意编译正则表达式(re.compile)以提高重复调用性能,并合理使用原始字符串(r'...')避免转义问题。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播