2013-03-04 99 views
1

原來我用的是URL模式:Django的URL正則表達式用括號,破折號

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

捕捉doc_type參數,該參數是一個字符串,正在從一個Django models.CharField拉昇,但是當我改變了模型使用的Django models.SlugField模式將不再匹配字符串(SlugField返回一個unicode字符串),這focred我的模式改變爲:

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

我的問題是爲什麼添加括號和' - '使模式匹配unicode字符串?

回答

4

我不確定Django,但我認爲你錯了。括號表示正則表達式中的character class選擇器。

所以\w[-\w]之間的不同之處在於:

  • \w僅匹配小寫&大寫字母以及數字和_(下劃線符號),但-(破折號)
  • 人物類[-\W]匹配\w所有匹配項加上-(破折號)

所以最有可能的原因是第一個正則表達式不適用於您的其他領域,但第二個正則表達式的確是在第二個領域有破折號。不是該字段包含Unicode字符的事實。

+0

呵呵,這很有道理,它不是slu was是unicode,它的slu contain包含' - '。非常感謝! – a2hill 2013-03-04 21:51:59

+0

不客氣! – 2013-03-04 21:52:48