У меня есть 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/
Только что попробовал, что он по-прежнему соответствует только последний. Я добавил один пример каждого регулярного выражения к описанию – straykiwi
@stray, он работает для меня. см. демонстрационную ссылку. Кроме того, ваши примеры не совпадают с вашим оригинальным вопросом - у них есть '' ... "' спереди, поэтому демо-ссылка использует '. *' спереди, чтобы имитировать «что угодно» в начале. Кроме того, все ваши образцы соответствуют исходному регулярному выражению. – Bohemian
скрученный круглый с этим немного, окончательная рабочая версия ^ news/(? P [a-z0-9 -] +)/([0-9] +/(вложение/[0-9] +/| [0-9] + /)?)? $ спасибо. Slug должно быть не было. + И необходимо использовать | –
straykiwi