regex - 在 Django url 正则表达式模式中使用括号和破折号

标签 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 字符串?

最佳答案

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

所以\w[-\w]之间的区别是:

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

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

关于regex - 在 Django url 正则表达式模式中使用括号和破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15211554/

相关文章:

JavaScript 正则表达式,查找引号外的所有文本

jquery - 使用 Django 和 jQuery 的订阅表单

python - 从大型 unicode 文本文件中删除符号

python - Django:显示管理站点的换行符?

python - 在 FAT32 文件系统上使用 python

mysql - UTF-8字符有问题;我看到的不是我存储的

c - __STDC_ISO_10646__ 的可能值

javascript - 将方括号拆分为逗号,删除第一个和最后一个逗号

javascript - 正则表达式删除子字符串和其他字符

javascript - 如何通过多个匹配的javascript读取两个表达式之间的子字符串