Python学不会来打我(47)正则表达式实战:手机号、邮箱、密码匹配

Python学不会来打我(47)正则表达式实战:手机号、邮箱、密码匹配在 Python 编程中 正则表达式 Regular Expression 是一个非常强大且实用的工具 它可以帮助我们快速地匹配 查找 替换和提取字符串中的特定内容

欢迎大家来到IT世界,在知识的湖畔探索吧!

在Python编程中,正则表达式(Regular Expression) 是一个非常强大且实用的工具。它可以帮助我们快速地匹配、查找、替换和提取字符串中的特定内容。

上一篇文章我们学习了正则表达式的基础语法,本文将重点讲解 手机号码、邮箱地址、网址、用户名与密码 等常见格式的正则表达式编写方法,并结合 Python 的 re 模块进行实际应用演示,帮助你掌握这些关键技能。

Python学不会来打我(47)正则表达式实战:手机号、邮箱、密码匹配



欢迎大家来到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

(0)
上一篇 1小时前
下一篇 49分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信