re_path неразрешенное регулярное выражение (d[1,2])

#python #django #path #re

#python #django #путь #python-re

Вопрос:

Пожалуйста, дайте мне знать, почему мое регулярное выражение не может быть разрешено, я просто скопировал и вставил из одной из книг Django и попытался передать параметр re_path(r'^time/plus/(d[1,2])/$', hours_ahead) . Просто попытался передать параметру дополнительные часы к текущему времени.

 http://127.0.0.1:8000/time/plus/2
  

затем я получил ошибку страница не найдена (404). Текущий путь, time / plus / 2, не соответствует ни одному из них.

Я не понимаю, в чем здесь проблема. пожалуйста, помогите, спасибо.

Ответ №1:

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

 case 1:
only 1 and 2 is accept
want:time/plus/2/ --pass
want:time/plus/1/ --pass
want:time/plus/3/ --fail
regex: r'^time/plus/[1,2]/$'

case 2:
length of that is 1 or 2 
want:time/plus/2/ --single digit -pass
want:time/plus/33/ --two digit -pass
want:time/plas/333/ --three digit -fail 
regex: r'^time/plus/d{1,2}/$'
  

Комментарии:

1. Спасибо, Кишан, это отличное объяснение. Ценю это.

Ответ №2:

Есть несколько проблем с вашим регулярным выражением:

 ^time/plus/(d[1,2])/$
              ^     ^
  
  1. Чтобы сопоставить одну или две цифры, вам нужно использовать синтаксис d{1,2} . d[1,2] будет соответствовать любой цифре, за которой следует 1 , запятая или 2 .
  2. Для вашего регулярного выражения требуется косая черта в конце, которой, похоже, нет у вашего ввода.

Что-то вроде

 ^time/plus/(d{1,2})/?$
  

может сработать.