将正则表达式组合成可选组

时间:2015-01-23 02:14:28

标签: regex django-urls

我有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/

并且不匹配任何其他模式。

编辑:更新我的尝试,越来越近,只是不确定为什么?不应该使组成为可选的

http://www.pyregex.com/上进行测试

1 个答案:

答案 0 :(得分:1)

嵌套选项:

^news/(?P<slug>.+)/([0-9]+/(attachment/([0-9]+/)?)?)?$

请参阅demo