在Django url正则表达式模式中使用括号和短划线

时间:2013-03-04 21:33:40

标签: regex django unicode

最初我使用的是url模式:

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

捕获doc_type参数,该参数是从django models.CharField中提取的字符串,但是当我将模型更改为使用django models.SlugField时,该模式将不再与字符串匹配(SlugField返回一个unicode字符串),它让我将模式更改为:

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

我的问题是为什么添加括号和' - '使模式匹配unicode字符串?

1 个答案:

答案 0 :(得分:4)

我不确定Django,但我认为你错了。括号表示正则表达式中的character class选择器。

因此\w[-\w]之间的区别在于:

  • \w仅匹配小写&amp;大写字母以及数字和_(下划线符号)但 -(短划线符号)
  • 字符类[-\W]匹配\w匹配的所有内容以及-(短划线符号)

所以很可能是第一个正则表达式不适用于你的其他字段而第二个正则表达式的原因是第二个字段中有破折号。不是该字段包含Unicode字符的事实。