python 重新工作时,django 过滤器正则表达式不工作
djagno filter regex not working while python re works
我正在尝试在 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 [=26] 中使用它时=] 正常工作
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
不支持 shorthand 字符 class,例如 \s
、\d
、\w
等。它支持一些基本的 POSIX 字符 class,例如 [:digit:]
、[:alpha:]
、[:alnum:]
等
即使您继续使用 Python 中的模式,您也不应编写 (\w|\d|\b|\s)+
,因为它匹配并捕获单个字符,即单词字符或数字、单词边界或空格, 1 次或多次(并用引擎匹配的最新字符重写 N 组的缓冲区)。您可以用单个字符重写它 class - [\w\s]+
.
现在,您在 MySQL 中的模式将如下所示
[_[:alnum:][:space:]]+h[_[:alnum:][:space:]]+anto[_[:alnum:][:space:]]+
其中 [\w\s]+
变成 [_[:alnum:][:space:]]+
:
[
- 括号表达式的开始
_
- 下划线(因为 \w
匹配 _
而 [:alnum:]
不匹配)
[:alnum:]
- 字母数字字符
[:space:]
- 任何空白字符
]
- 括号表达式结束
+
- 量词,1 次或多次。
我正在尝试在 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 [=26] 中使用它时=] 正常工作
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
不支持 shorthand 字符 class,例如 \s
、\d
、\w
等。它支持一些基本的 POSIX 字符 class,例如 [:digit:]
、[:alpha:]
、[:alnum:]
等
即使您继续使用 Python 中的模式,您也不应编写 (\w|\d|\b|\s)+
,因为它匹配并捕获单个字符,即单词字符或数字、单词边界或空格, 1 次或多次(并用引擎匹配的最新字符重写 N 组的缓冲区)。您可以用单个字符重写它 class - [\w\s]+
.
现在,您在 MySQL 中的模式将如下所示
[_[:alnum:][:space:]]+h[_[:alnum:][:space:]]+anto[_[:alnum:][:space:]]+
其中 [\w\s]+
变成 [_[:alnum:][:space:]]+
:
[
- 括号表达式的开始_
- 下划线(因为\w
匹配_
而[:alnum:]
不匹配)[:alnum:]
- 字母数字字符[:space:]
- 任何空白字符]
- 括号表达式结束+
- 量词,1 次或多次。