当python重新运行时,djagno过滤器正则表达式无法正常工作

时间:2017-07-21 10:41:26

标签: 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,任何人都知道如何解决这个问题

1 个答案:

答案 0 :(得分:1)

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

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

现在,你在MySQL中的模式看起来像

[\w\s]+

其中[_[:alnum:][:space:]]+h[_[:alnum:][:space:]]+anto[_[:alnum:]‌​[:space:]]+ 变为[\w\s]+

  • [_[:alnum:][:space:]]+ - 括号表达式的开头
  • [ - 下划线(_匹配\w_不匹配)
  • [:alnum:] - 一个alphanuemric char
  • [:alnum:] - 任何空白字符
  • [:space:] - 括号表达式的结尾
  • ] - 量词,1次或更多次。