我正在尝试在 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/