我试图做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 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次或更多次。