URL-выражения RegEx и Django - PullRequest
       3

URL-выражения RegEx и Django

1 голос
/ 29 марта 2011

Разве это не должно принимать два разных шаблона, таких как /hello/ и /hello/123/?Первый, кажется, универсальный.

(r'^(?P<org>\S+)/$', 'path.to.view'),
(r'^(?P<org>\S+)/(?P<id>\d{3})/$', 'path.to.view'),

Что я действительно хочу найти, так это слаг и количество переменной длины (хотя над ним показаны только три символа): /hello-slug-name/123/ или просто /hello-slug-name/

Редактировать:

Примечание для потомков: из двух приведенных ниже ответов оба очень полезны для понимания происходящего здесь.Я делаю ответ, который в конечном итоге использовал в своей реализации, как «правильный» с зеленой галочкой, но оба они очень проницательны и полезны.

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

Первое регулярное выражение соответствует любой строке, которая состоит из непробельных символов и заканчивается косой чертой.Поэтому он соответствует обеим вашим строкам.

Второе регулярное выражение соответствует строке, состоящей из непробельных символов, с косой чертой, тремя цифрами и еще одной косой чертой.

Из вашего примера я понимаю, что под «числом различной длины» вы также подразумеваете «возможно ноль (в этом случае слеш также удаляется)».Одно регулярное выражение, которое охватывало бы все эти случаи, было бы

^(?P<org>\S+?)/(?:(?P<id>\d+)/)?$
2 голосов
/ 29 марта 2011

попробуйте использовать это:

(r'^(?P<org>[-A-Za-z0-9_]+)/$', 'path.to.view'),
(r'^(?P<org>[-A-Za-z0-9_]+)/(?P<id>\d+)/$', 'path.to.view'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...