2015-01-23 4 views
1

У меня есть 4 регулярных выражения, которые в настоящее время работают, но я хочу объединить их в 1 регулярное выражение, потому что есть много похожих элементов, и это, вероятно, лучше. Это в Джанго 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]+)?)?/$  

Edit: Примеры регулярных выражений каждого

/news/some-slug/1231/attachment/1231 
/news/some-slug/123121/1231/ 
/news/some-slug/1312/ 
/news/some-slug/ 

И не совпадают любые другие узоры.

EDIT: обновил мою попытку, приблизился, просто не уверен, почему? разве что делает группы по желанию, как это должно

тестирование на http://www.pyregex.com/

ответ

1

гнездо варианты:

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

См demo

+0

Только что попробовал, что он по-прежнему соответствует только последний. Я добавил один пример каждого регулярного выражения к описанию – straykiwi

+0

@stray, он работает для меня. см. демонстрационную ссылку. Кроме того, ваши примеры не совпадают с вашим оригинальным вопросом - у них есть '' ... "' спереди, поэтому демо-ссылка использует '. *' спереди, чтобы имитировать «что угодно» в начале. Кроме того, все ваши образцы соответствуют исходному регулярному выражению. – Bohemian

+0

скрученный круглый с этим немного, окончательная рабочая версия ^ news/(? P [a-z0-9 -] +)/([0-9] +/(вложение/[0-9] +/| [0-9] + /)?)? $ спасибо. Slug должно быть не было. + И необходимо использовать | – straykiwi

Смежные вопросы