欢迎大家来到IT世界,在知识的湖畔探索吧!
在Python编程中,正则表达式(Regular Expression) 是一个非常强大且实用的工具。它可以帮助我们快速地匹配、查找、替换和提取字符串中的特定内容。
上一篇文章我们学习了正则表达式的基础语法,本文将重点讲解 手机号码、邮箱地址、网址、用户名与密码 等常见格式的正则表达式编写方法,并结合 Python 的 re 模块进行实际应用演示,帮助你掌握这些关键技能。
欢迎大家来到IT世界,在知识的湖畔探索吧!
一、什么是正则表达式?
正则表达式是一种用于描述字符串模式的语言,它可以用来:
- 检查一个字符串是否符合某种格式
- 提取字符串中的某些部分
- 替换字符串中的某些内容
例如:
import re text = "我的电话是" match = re.search(r'\d{11}', text) if match: print("找到手机号码:", match.group())
欢迎大家来到IT世界,在知识的湖畔探索吧!
输出:
欢迎大家来到IT世界,在知识的湖畔探索吧!找到手机号码:
二、正则表达式基础语法回顾
|
表达式 |
含义 |
|
\d |
匹配数字(0-9) |
|
\D |
匹配非数字 |
|
\w |
匹配字母、数字或下划线 |
|
\W |
匹配非单词字符 |
|
\s |
匹配空白字符(空格、制表符、换行等) |
|
\S |
匹配非空白字符 |
|
. |
匹配任意单个字符(除了换行符) |
|
^ |
匹配字符串开头 |
|
$ |
匹配字符串结尾 |
|
* |
匹配前一个字符0次或多次 |
|
+ |
匹配前一个字符1次或多次 |
|
? |
匹配前一个字符0次或1次 |
|
{n} |
匹配前一个字符恰好 n 次 |
|
{n,m} |
匹配前一个字符至少 n 次,最多 m 次 |
三、手机号码的正则匹配规则
1. 中国大陆手机号码格式说明
- 总长度为11位
- 开头一般是13、14、15、17、18、19开头
- 中间9位为数字
2. 正则表达式示例
phone_pattern = r'^1[3-9]\d{9}#39;
解释:
- ^1:以1开头
- [3-9]:第二位是3~9之间的数字
- \d{9}:后面还有9个数字
- $:结束
3. 使用示例
欢迎大家来到IT世界,在知识的湖畔探索吧!import re phones = ["", "", ""] for phone in phones: if re.match(r'^1[3-9]\d{9}#39;, phone): print(f"{phone} 是合法手机号") else: print(f"{phone} 是非法手机号")
输出:
是合法手机号 是非法手机号 是合法手机号
四、邮箱地址的正则匹配规则
1. 邮箱地址的基本格式
- 用户名部分可以包含字母、数字、点、下划线、百分号、加号、减号
- @ 符号
- 域名部分由多个标签组成,每个标签之间用点分隔,标签只能是字母、数字和连字符
- 最后是顶级域名(如 .com, .org, .net)
2. 正则表达式示例
欢迎大家来到IT世界,在知识的湖畔探索吧!email_pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+#39;
3. 使用示例
emails = [ "", "", "invalid-email@", "test@123" ] for email in emails: if re.match(email_pattern, email): print(f"{email} 是合法邮箱") else: print(f"{email} 是非法邮箱")
输出:
欢迎大家来到IT世界,在知识的湖畔探索吧! 是合法邮箱 是合法邮箱 invalid-email@ 是非法邮箱 test@123 是非法邮箱
五、网址(URL)的正则匹配规则
1. URL 地址的基本结构
- 协议头(http:// 或 https://)
- 域名(如 www.example.com)
- 路径(可选,如 /path/to/resource)
- 查询参数(可选,如 ?key=value)
2. 正则表达式示例(简化版)
url_pattern = r'^(https?://)?(www\.)?[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})+(/[^\s]*)?#39;
解释:
- (https?://)?:协议头可有可无
- (www\.)?:www 可选
- [a-zA-Z0-9-]+:域名主体
- (\.[a-zA-Z]{2,})+:域名后缀,如 .com/.co.uk 等
- (/[^\s]*)?:路径部分,可选
3. 使用示例
欢迎大家来到IT世界,在知识的湖畔探索吧!urls = [ "https://www.example.com", "http://example.com/path/to/page?query=1", "www.google.com", "invalid-url", "ftp://example.com" ] for url in urls: if re.match(url_pattern, url): print(f"{url} 是合法网址") else: print(f"{url} 是非法网址")
输出:
https://www.example.com 是合法网址 http://example.com/path/to/page?query=1 是合法网址 www.google.com 是合法网址 invalid-url 是非法网址 ftp://example.com 是非法网址
注意:该规则不支持 ftp、ws、git 等其他协议,仅适用于 http/https。
六、用户名与密码的正则匹配规则
1. 用户名规则(常见要求)
- 长度一般在4~20位之间
- 可以包含字母、数字、下划线、短横线
- 不能以数字开头
正则表达式:
欢迎大家来到IT世界,在知识的湖畔探索吧!username_pattern = r'^[a-zA-Z][a-zA-Z0-9_-]{3,19}#39;
2. 密码规则(常见要求)
- 至少8位
- 必须包含大小写字母和数字
- 可以包含特殊字符
正则表达式:
password_pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}#39;
解释:
- (?=.*[a-z]):必须包含小写字母
- (?=.*[A-Z]):必须包含大写字母
- (?=.*\d):必须包含数字
- .{8,}:总长度至少8位
3. 使用示例
欢迎大家来到IT世界,在知识的湖畔探索吧!usernames = ["user_123", "123user", "u_se-rname", "too_long_username123"] passwords = ["Password123", "passWord", "weakpass", "STRONG123"] for username in usernames: if re.match(username_pattern, username): print(f"{username} 是合法用户名") else: print(f"{username} 是非法用户名") for password in passwords: if re.match(password_pattern, password): print(f"{password} 是合法密码") else: print(f"{password} 是非法密码")
输出:
user_123 是合法用户名 123user 是非法用户名 u_se-rname 是合法用户名 too_long_username123 是非法用户名 Password123 是合法密码 passWord 是非法密码 weakpass 是非法密码 STRONG123 是非法密码
七、综合实战:用户注册信息验证
下面是一个完整的示例程序,模拟用户注册时对手机号、邮箱、用户名、密码的格式验证。
欢迎大家来到IT世界,在知识的湖畔探索吧!import re def validate_phone(phone): pattern = r'^1[3-9]\d{9}#39; return bool(re.match(pattern, phone)) def validate_email(email): pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+#39; return bool(re.match(pattern, email)) def validate_username(username): pattern = r'^[a-zA-Z][a-zA-Z0-9_-]{3,19}#39; return bool(re.match(pattern, username)) def validate_password(password): pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}#39; return bool(re.match(pattern, password)) # 模拟用户输入 user_info = { "phone": "", "email": "", "username": "my_user", "password": "MyPass123" } print("开始验证用户信息...") for field, value in user_info.items(): if field == "phone": valid = validate_phone(value) elif field == "email": valid = validate_email(value) elif field == "username": valid = validate_username(value) elif field == "password": valid = validate_password(value) print(f"{field}: {value} → {'有效' if valid else '无效'}")
输出:
开始验证用户信息... phone: → 有效 email: → 有效 username: my_user → 有效 password: MyPass123 → 有效
八、注意事项与最佳实践
✅ 最佳实践:
- 尽量使用原始字符串(前面加 r)避免转义问题
- 对复杂逻辑使用模块化函数封装,提高代码可读性
- 测试时使用多个样例验证正则表达式准确性
- 多用命名组((?P<name>…))提升可维护性
❗ 常见问题:
- 忘记使用 ^ 和 $ 导致部分匹配错误
- 忽略大小写敏感问题,可使用 re.IGNORECASE 参数
- 正则表达式过于复杂导致性能下降
- 忘记处理 None 导致程序报错
九、总结
通过本文的学习,你应该已经掌握了以下知识:
- 如何使用正则表达式匹配手机号、邮箱、网址、用户名和密码
- Python中 re 模块的基本使用方法
- 如何构建复杂的正则表达式来满足实际开发需求
- 实战项目:用户注册信息验证系统的设计与实现
- 正则表达式的进阶技巧与调试建议
正则表达式是每一个 Python 编程者都应该掌握的核心技能之一。熟练掌握它不仅能提升你的开发效率,还能帮你解决许多看似复杂的文本处理任务。
希望这篇文章能帮助你在 Python 编程之路上越走越远!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/127986.html