regex - django url 正则表达式匹配可选参数
问题描述
我需要一个应该匹配以下字符串的正则表达式:
- 用户/24
- 用户/24/
- 用户/24/山姆
- 用户/24/山姆/
- 用户/24/sam/tab_name
- 用户/24/sam/tab_name/
其中,pk=24,用户名=sam,tab=tab_name
到目前为止,我有一个网址:
url(r'^users/(?P<pk>\d+)/(?P<username>[-\w\d]+)?/?(?P<tab>[-\w\d]+)?/?', vw.ProfileView.as_view(), name='profile')
上面的 url 匹配上面的所有内容。但是在使用的时候
{% url 'profile' pk=24 username="sam" tab="tab_name" %}
输出是:用户/samtab_name
我知道这里的问题,/?
即可选斜杠。但我不希望它在使用时是可选的{% url 'profile' pk=24 username="sam" tab="tab_name" %}
帮我解决这个问题。
解决方案
您可以/
通过将它们与命名的捕获组放在可选的非捕获组中来强制执行:
^users/(?P<pk>\d+)(?:/(?P<username>[-\w]+))?(?:/(?P<tab>[-\w]+))?/?
请参阅正则表达式演示。
请注意,\w
已经匹配数字,因此您不需要\d
在字符类中。
细节
^
- 字符串的开始users/
- 文字子串(?P<pk>\d+)
- 匹配 1+ digtis 的命名捕获组“pk”(?:/(?P<username>[-\w]+))?
- 一个可选的非捕获组(?
关闭后有量词)
)匹配/
- 一个/
字符(?P<username>[-\w]+)
- 组“用户名”:1+ 字或-
字符
(?:/(?P<tab>[-\w]+))?
- 一个可选的非捕获组匹配/
- 一个/
字符(?P<tab>[-\w]+)
- 组“标签”:1+ 字或-
字符
/?
- 一个可选/
字符。
推荐阅读
- javascript - JS reduce:对象累加器标题
- c# - Microsoft Graph 事件资源类型:更新开始和结束日期时间问题
- php - 如何确保 mysql 查询字符串 php 中没有缺失值
- c# - C# 类构造函数问题
- mongodb - 我应该为此创建一个单独的模型(集合)吗?
- python - shutil.make_archive 后 .txt 文件中缺少内容
- scala - 在哪里可以找到下载的 sbt 插件?
- c# - 如何在 System.Net.WebSockets 中的 ClientWebSocket 上设置 ClientWebSocketOptions
- c++ - 如何将输出从 1 更改为星期一?
- c++ - 如何使用调试标志构建 OpenCV