正则表达式是处理字符串的“神器”,用于匹配、查找、替换符合规则的字符串,比如提取文本中的手机号、验证邮箱格式、清洗数据等。很多新手觉得正则表达式语法晦涩难懂,其实掌握常用的匹配规则,再结合实战案例,就能快速上手。

今天分享Python正则表达式的基础用法,聚焦“手机号、邮箱、身份证”这3个高频场景,搭配可直接运行的代码,新手复制就能用,轻松解决字符串处理问题~

一、核心基础:正则表达式常用符号(新手必记)

先记几个最常用的符号,覆盖80%的场景:

符号 含义 示例
\d 匹配数字(0-9) \d{11} → 匹配11位数字
\w 匹配字母/数字/下划线 \w+ → 匹配至少1个字母/数字/下划线
[] 匹配括号内的任意字符 [0-9a-zA-Z] → 匹配数字或字母
^ 匹配字符串开头 ^13 → 匹配以13开头的字符串
$ 匹配字符串结尾 com$ → 匹配以com结尾的字符串
{n} 匹配n次 \d{6} → 匹配6位数字
{n,m} 匹配n到m次 \d{6,18} → 匹配6-18位数字
+ 匹配至少1次 \d+ → 匹配至少1位数字
* 匹配0次或多次 \d* → 匹配0位或多位数字

二、Python正则模块:re(核心!)

Python通过re模块操作正则表达式,新手重点掌握4个函数:

  • re.match():从字符串开头匹配(用得少);

  • re.search():查找字符串中第一个匹配的内容;

  • re.findall():查找所有匹配的内容(最常用);

  • re.sub():替换匹配的内容。

三、实战1:匹配手机号(11位,以13/14/15/17/18/19开头)


import re

# 手机号正则规则
phone_pattern = r"^1[345789]\d{9}$"

# 测试数据
phones = ["13800138000", "12345678901", "1380013800", "138001380001"]

for phone in phones:
    # re.match:从开头匹配,返回匹配对象(成功)/None(失败)
    result = re.match(phone_pattern, phone)
    if result:
        print(f"{phone} 是有效手机号")
    else:
        print(f"{phone} 是无效手机号")

# 输出:
# 13800138000 是有效手机号
# 12345678901 是无效手机号(开头不是13/14等)
# 1380013800 是无效手机号(不足11位)
# 138001380001 是无效手机号(超过11位)

四、实战2:提取文本中的所有邮箱


import re

# 邮箱正则规则
email_pattern = r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"

# 测试文本
text = """
联系我们:support@test.com,营销邮箱:market@test.cn,
个人邮箱:zhangsan123@163.com,无效邮箱:zhangsan@test
"""

# re.findall:提取所有匹配的邮箱
emails = re.findall(email_pattern, text)
print("提取的邮箱:")
for email in emails:
    print(email)

# 输出:
# support@test.com
# market@test.cn
# zhangsan123@163.com

五、实战3:验证身份证号(18位,最后一位可为X)


import re

# 身份证正则规则(18位,前17位数字,最后一位数字/X/x)
id_card_pattern = r"^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$"

# 测试数据
id_cards = ["110101199001011234", "11010119900101123X", "11010119900101123", "1101011990010112345"]

for id_card in id_cards:
    result = re.match(id_card_pattern, id_card)
    if result:
        print(f"{id_card} 是有效身份证号")
    else:
        print(f"{id_card} 是无效身份证号")

# 输出:
# 110101199001011234 是有效身份证号
# 11010119900101123X 是有效身份证号
# 11010119900101123 是无效身份证号(不足18位)
# 1101011990010112345 是无效身份证号(超过18位)

六、实战4:替换文本中的敏感词


import re

# 敏感词正则(匹配“垃圾”“骗子”)
sensitive_pattern = r"垃圾|骗子"

# 测试文本
text = "这个商家是骗子,卖的都是垃圾产品!"

# re.sub:替换匹配的敏感词为*
new_text = re.sub(sensitive_pattern, "*", text)
print("替换后:", new_text)

# 输出:这个商家是*,卖的都是*产品!

七、新手避坑指南

  1. 正则规则加r前缀:避免转义字符(如\d不要写成\d);

  2. 匹配中文:用[\u4e00-\u9fa5](匹配单个中文);

  3. 贪婪匹配:正则默认贪婪(尽可能多匹配),加?变为非贪婪(如\d+?);

  4. 测试规则:先用在线正则工具(如正则表达式测试器)验证规则,再写代码。

最后

正则表达式的核心是“规则匹配”,新手不用死记所有符号,先掌握手机号、邮箱、身份证这3个高频场景的规则,再根据需求查文档扩展。练习时可以尝试提取文本中的手机号、清洗评论中的敏感词,巩固知识点。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐