2

最初我使用的是 url 模式:

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

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

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

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

4

1 回答 1

5

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

\w所以和之间的区别在于[-\w]

  • \w仅匹配小写和大写字母以及数字和_(下划线符号),但不匹配-(破折号)
  • 字符类[-\W]匹配所有\w匹配项加上-(破折号)

因此,第一个正则表达式不适用于您的其他字段但第二个正则表达式起作用的原因很可能是第二个字段中有破折号。不是该字段包含 Unicode 字符的事实。

于 2013-03-04T21:38:28.827 回答