2013-03-04 2 views
1

Первоначально я использовал шаблон URL:Использование скобок и тире в Django шаблон URL регулярных выражений

url(r'^poi/folder/(?P<doc_type>\w+)/$', ...)

захватить параметр doc_type который был строка вытягиваемым с Джанго models.CharField, однако, когда я изменил модель использовать Джанго models.SlugField шаблон больше не будет соответствовать строке (SlugField возвращает строку Юникода), которая focred меня изменить шаблон, чтобы:

url(r'^poi/folder/(?P<doc_type>[-\w]+)/$', ...

Мой вопрос в том, почему добавление скобок и '-' делают шаблон совпадающим с строкой в ​​юникоде?

ответ

4

Я не уверен в особенности Django, но, думаю, вы ошибаетесь. В скобках указывается селектор character class в регулярных выражениях.

Таким образом, разница между \w и [-\w] является то, что:

  • \w соответствует только строчные & прописные буквы, а также цифры и подчеркивания (символ), но не в (символ тире) -_
  • класс персонажей [-\W] соответствует всем \w соответствует плюс - (символ штриховки)

Так что, скорее всего, причина, по которой первое регулярное выражение не срабатывало для вашего другого поля, но второе регулярное выражение заключалось в том, что во второй подаче были тире. Не факт, что поле содержит символы Unicode.

+0

О, это так много значит, это не то, что пуля была юникодом, ее пули содержат «-». Спасибо! – a2hill

+0

добро пожаловать! –