最初我使用的是 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 字符串?
最佳答案
我对 Django 不太确定,但我认为你错了。括号表示 character class正则表达式中的选择器。
所以\w
和[-\w]
之间的区别是:
\w
仅匹配小写和大写字母以及数字和_
(下划线符号),但不匹配-
(破折号)- 字符类
[-\W]
匹配\w
匹配的所有内容以及-
(破折号)
因此,第一个正则表达式不适用于您的其他字段但第二个正则表达式适用的原因很可能是第二个字段中存在破折号。事实并非该字段包含 Unicode 字符。
关于regex - 在 Django url 正则表达式模式中使用括号和破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15211554/