mysql - django 过滤器正则表达式在 python 重新工作时不起作用

标签 mysql regex django django-models django-mysql

我正在尝试在 django 中对正则表达式进行 iregex 匹配

reg_string = (\w|\d|\b|\s)+h(\w|\d|\b|\s)+(\w|\d|\b|\s)+anto(\w|\d|\b|\s)+
self.queryset.filter(name__iregex=r"%s"%(reg_string,))

使用单词“The Canton”作为名称,但它不返回任何值,但在python re.search中使用它时它的工作

print (re.search(r'(\w|\d|\b|\s)+h(\w|\d|\b|\s)+(\w|\d|\b|\s)+anto(\w|\d|\b|\s)+', 'The Canton', re.I).group()

我使用的是Mysql 5.7,任何人都知道如何解决这个问题

最佳答案

请注意,MySQL REGEXP 不支持速记字符类,例如 \s\d\w等。它支持一些基本的 POSIX 字符类,例如 [:digit:][:alpha:][:alnum:]、等等

即使您继续在 Python 中使用该模式,也不应该编写 (\w|\d|\b|\s)+ 因为它匹配并捕获单个字符,该字符是字字符或数字、字边界或空格,1 次或多次(并使用引擎匹配的最新字符重写 N 组缓冲区)。您可以使用单个字符类重写它 - [\w\s]+

现在,MySQL 中的模式将如下所示

[_[:alnum:][:space:]]+h[_[:alnum:][:space:]]+anto[_[:alnum:]‌​[:space:]]+

其中 [\w\s]+ 转换为 [_[:alnum:][:space:]]+:

  • [ - 括号表达式的开头
  • _ - 下划线(因为 \w 匹配 _[:alnum:] 不匹配)
  • [:alnum:] - 字母数字字符
  • [:space:] - 任何空白字符
  • ] - 括号表达式的结尾
  • + - 量词,1 次或多次。

关于mysql - django 过滤器正则表达式在 python 重新工作时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235580/

相关文章:

具有产品、产品类别和不同属性的 MySQL 数据库

python - 在Python中使用正则表达式提取特定值

python - Django 仅清除详细 View 的缓存

c# - 如何将 MySql 连接器导入 Unity 项目?

php - 检查选择时插入数据库的 radio

sql - Mysql 日期选择

javascript - 有人可以帮我用正则表达式提取文本吗?

regex - 正则表达式可以在所有.net引擎中在线工作,而不能在Powershell中工作?

html - CSS 中的 vh 和百分比?

python - 将 django-storages 后端从 s3 更改为 cloudfiles 并处理旧文件