将正则表达式组合成可选组
combing regexes into optional groups
我有 4 个当前可用的正则表达式,但我想将它们组合成 1 个正则表达式,因为有很多相似的元素,这可能是更好的做法。这是在 django urls.py
url(r'^news/(?P<slug>[a-z0-9-]+)/[0-9]+/attachment/[0-9]+/$',
url(r'^news/(?P<slug>[a-z0-9-]+)/[0-9]+/[0-9]+/$',
url(r'^news/(?P<slug>[a-z0-9-]+)/[0-9]+/$',
url(r'^news/(?P<slug>[a-z0-9-]+)/$',
这是我的尝试,但它只匹配前两个。
^news/(?P<slug>[a-z0-9-]+)/([0-9]+/(attachment/[0-9]+|[0-9]+)?)?/$
编辑:
每个正则表达式的例子
/news/some-slug/1231/attachment/1231
/news/some-slug/123121/1231/
/news/some-slug/1312/
/news/some-slug/
并且不匹配任何其他模式。
编辑:更新了我的尝试,越来越近了,只是不确定为什么?没有让组成为可选的,因为它应该
嵌套选项:
^news/(?P<slug>.+)/([0-9]+/(attachment/([0-9]+/)?)?)?$
见demo
我有 4 个当前可用的正则表达式,但我想将它们组合成 1 个正则表达式,因为有很多相似的元素,这可能是更好的做法。这是在 django urls.py
url(r'^news/(?P<slug>[a-z0-9-]+)/[0-9]+/attachment/[0-9]+/$',
url(r'^news/(?P<slug>[a-z0-9-]+)/[0-9]+/[0-9]+/$',
url(r'^news/(?P<slug>[a-z0-9-]+)/[0-9]+/$',
url(r'^news/(?P<slug>[a-z0-9-]+)/$',
这是我的尝试,但它只匹配前两个。
^news/(?P<slug>[a-z0-9-]+)/([0-9]+/(attachment/[0-9]+|[0-9]+)?)?/$
编辑: 每个正则表达式的例子
/news/some-slug/1231/attachment/1231
/news/some-slug/123121/1231/
/news/some-slug/1312/
/news/some-slug/
并且不匹配任何其他模式。
编辑:更新了我的尝试,越来越近了,只是不确定为什么?没有让组成为可选的,因为它应该
嵌套选项:
^news/(?P<slug>.+)/([0-9]+/(attachment/([0-9]+/)?)?)?$
见demo