我需要一个应该与以下字符串匹配的正则表达式:
- 用户/24
- 用户/24/
- 用户/24/SAM
- 用户/24/山姆/
- 用户/24/山姆/tab_name
- 用户/24/山姆/tab_name/
其中,pk=24,用户名=SAM,制表符=tab_name
到目前为止,我有一个网址为:
url(r'^users/(?P<pk>d+)/(?P<username>[-wd]+)?/?(?P<tab>[-wd]+)?/?', vw.ProfileView.as_view(), name='profile')
上面的网址与上面的所有内容相匹配。但是在使用时 {% 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+ 数字的命名捕获组"pk"> -
(?:/(?P<username>[-w]+))?
- 一个可选的非捕获组(在结束)
之后有?
量词(匹配-
/
-/
字符 -
(?P<username>[-w]+)
- 组"用户名":1+ 个单词或-
个字符
-
-
(?:/(?P<tab>[-w]+))?
- 可选的非捕获组匹配-
/
-/
炭 -
(?P<tab>[-w]+)
- 组"制表符":1+ 个单词或-
个字符
-
-
/?
- 可选的/
字符。