正则表达式(学习Django过程中可能涉及的)

在学习 Django 的过程中,正则表达式主要应用在以下场景中:

  1. 路由匹配(虽然 Django 3.0 及之后推荐使用路径转换器,但了解正则表达式仍然有用)。
  2. 表单验证:验证用户输入是否符合特定格式(如邮箱、手机号)。
  3. 数据处理:处理或提取字符串中的特定信息。

以下是你在学习 Django 过程中可能涉及到的正则表达式,以及它们的功能和示例。


1. 基本字符匹配

正则表达式 描述 示例
. 匹配任意单个字符(除了换行符)。 a.b 匹配 acb
\d 匹配任意一个数字,等价于 [0-9] \d{3} 匹配 123
\w 匹配字母、数字或下划线,等价于 [a-zA-Z0-9_] \w+ 匹配 abc123
\s 匹配任意空白字符(空格、制表符、换行等)。 \s+ 匹配空格区域。

2. 数量控制

正则表达式 描述 示例
* 匹配前一个字符 0 次或多次。 a* 匹配 aaaa
+ 匹配前一个字符 1 次或多次。 a+ 匹配 aaaa
? 匹配前一个字符 0 次或 1 次。 a? 匹配 a 或空字符串。
{n} 匹配前一个字符正好 n 次。 a{3} 匹配 aaa
{n,} 匹配前一个字符至少 n 次。 a{2,} 匹配 aa 或更多。
{n,m} 匹配前一个字符至少 n 次,至多 m 次。 a{2,4} 匹配 aaaaaaaaa

3. 分组和选择

正则表达式 描述 示例
( ... ) 将正则表达式括起来,表示分组。 (ab)+ 匹配 abab
` ` 匹配左右任意一个表达式(逻辑"或")。

4. 特殊符号

正则表达式 描述 示例
^ 匹配字符串的开头。 ^a 匹配 abc 中的 a
$ 匹配字符串的结尾。 a$ 匹配 cba 中的 a
\b 匹配单词边界。 \bcat\b 匹配 cat,但不匹配 cats

5. 常用场景的正则表达式

路由匹配

早期的 Django 版本会用正则表达式匹配 URL 路由,例如:

python 复制代码
from django.urls import re_path

urlpatterns = [
    re_path(r'^articles/(\d{4})/$', views.year_archive),  # 匹配年份,如 /articles/2024/
]
表单验证

通过正则表达式验证用户输入:

python 复制代码
import re
from django import forms

class MyForm(forms.Form):
    phone = forms.CharField(
        validators=[
            forms.RegexValidator(
                regex=r'^\+?1?\d{9,15}$',
                message="请输入有效的国际电话号码。"
            )
        ]
    )
常见正则表达式实例
场景 正则表达式 示例
邮箱地址 ^[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ test@example.com
国内手机号 ^1[3-9]\d{9}$ 13812345678
日期(YYYY-MM-DD) ^\d{4}-\d{2}-\d{2}$ 2024-12-25
IPv4 地址 ^(\d{1,3}\.){3}\d{1,3}$ 192.168.1.1
URL ^https?://[A-Za-z0-9.-]+\.[A-Za-z]{2,}/?.*$ https://example.com/path

Django 中正则表达式替代

Django 3.0 开始推荐使用路径转换器代替复杂的正则表达式匹配。例如:

python 复制代码
from django.urls import path

urlpatterns = [
    path('articles/<int:year>/', views.year_archive),  # 替代了正则的方式
]

学习建议

  1. 在线工具练习 :可以在网站 regex101 测试和理解正则表达式。
  2. 从简单开始:从常见的验证需求入手(如邮箱、手机号)。
  3. 结合 Django 应用:尝试在表单验证和路由中实际使用正则表达式。
相关推荐
2501_920627611 小时前
Flutter 框架跨平台鸿蒙开发 - 古文学习应用
学习·flutter·harmonyos
AC赳赳老秦4 小时前
Windows 系统 OpenClaw 执行策略报错及管理员权限设置深度解析与实操指南
运维·人工智能·python·django·自动化·媒体·openclaw
江苏世纪龙科技4 小时前
【世纪龙科技】当智能网联汽车教学遇上“数字孪生”
学习
杰尼龟3685 小时前
Convince Develop 学习笔记
笔记·学习
不早睡不改名@5 小时前
Netty源码分析---Reactor线程模型深度解析(二)
java·网络·笔记·学习·netty
婷婷_1725 小时前
【PCIe验证每日学习·Day25】PCIe 电源管理机制(L0s/L1/L2/L3)全解析
网络·学习·程序人生·芯片·电源管理·pcie 验证·低功耗状态
東雪木6 小时前
Java学习——一访问修饰符(public/protected/default/private)的权限控制本质
java·开发语言·学习·java面试
星幻元宇VR7 小时前
VR摩托车|沉浸式交通安全教育的新方向
科技·学习·安全·vr·虚拟现实
ZhiqianXia7 小时前
Pytorch 学习笔记(4) : torch.backends
pytorch·笔记·学习
m0_564876847 小时前
提示词工程手册学习
人工智能·python·深度学习·学习