而蟒蛇重新作品的Django过滤器的正则表达式不工作

问题描述 投票:0回答:1

我试图做iregex比赛在Django的正则表达式

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,))

通过使用这个词的“广州”为名称,但它不返回任何值,但同时在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 regex django django-models django-mysql
1个回答
2
投票

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

即使您继续使用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:] - 一个alphanuemric字符
  • [:space:] - 任意空白字符
  • ] - 支架表达的端
  • + - 量词,1次或更多次。
© www.soinside.com 2019 - 2024. All rights reserved.