Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django搜索存储在模型中的regexp列表_Regex_Django_Django Models_Filtering - Fatal编程技术网

Django搜索存储在模型中的regexp列表

Django搜索存储在模型中的regexp列表,regex,django,django-models,filtering,Regex,Django,Django Models,Filtering,这是我的问题。 比如说,我有一个带有regexp列表的模型 |__Field_| | (\w+) | | ([op]+)| | .* | | others.| 我有一个单词列表,比如('cat'、'dog'、'wolf'),我需要找到模型中存储的哪个regexp与列表中的一个单词(或多个单词)匹配… 它就像一个逆正则表达式过滤器。 如何实现此功能 有没有更好的方法来做这样的事情 谢谢 正如@DrTyrsa评论的那样,除了循环处理每个案例之外,我非常怀疑有什么“方法

这是我的问题。
比如说,我有一个带有regexp列表的模型

|__Field_|  
| (\w+)  |  
| ([op]+)|  
| .*     |  
| others.|  
我有一个单词列表,比如('cat'、'dog'、'wolf'),我需要找到模型中存储的哪个regexp与列表中的一个单词(或多个单词)匹配…
它就像一个逆正则表达式过滤器。
如何实现此功能

有没有更好的方法来做这样的事情

谢谢

正如@DrTyrsa评论的那样,除了循环处理每个案例之外,我非常怀疑有什么“方法”可以做到这一点

如果性能是一个问题,我想您可以进行一些优化。例如,假设您的许多正则表达式都有
\w\w+
(即包含两个或多个字母的单词)。您可以只根据
\w\w+
检查每个单词,例如“cat”或“1234”,如果单词不匹配,则不必费心运行其余的正则表达式,因为它们都依赖于一个组件

当然,零接受量词
*
,和
{}
,以及交替运算符
|
,使得这一特定想法不可能实现,除非您将正则表达式正则化以过滤掉
^[^?*{}]+$
。但现在我们变得越来越可笑了。你需要一种“regex层次结构”来实现这样的“优化”,这已经很疯狂了。我认为其他人可以提出更实际的优化

祝你好运。

我非常怀疑是否有一种“方法”可以做到这一点,而不是像@DrTyrsa所说的那样循环处理每个案例

如果性能是一个问题,我想您可以进行一些优化。例如,假设您的许多正则表达式都有
\w\w+
(即包含两个或多个字母的单词)。您可以只根据
\w\w+
检查每个单词,例如“cat”或“1234”,如果单词不匹配,则不必费心运行其余的正则表达式,因为它们都依赖于一个组件

当然,零接受量词
*
,和
{}
,以及交替运算符
|
,使得这一特定想法不可能实现,除非您将正则表达式正则化以过滤掉
^[^?*{}]+$
。但现在我们变得越来越可笑了。你需要一种“regex层次结构”来实现这样的“优化”,这已经很疯狂了。我认为其他人可以提出更实际的优化


祝你好运。

你没有指定两件重要的事情:

  • 你在使用什么数据库
  • 您可以在PCRE和POSIX正则表达式之间切换吗
假设您使用的数据库允许使用正则表达式执行查询,并且您的数据库支持所需的标准(PCRE/POSIX),那么您可以使用。请看下面的代码:

Model.objects.extra(where=[sql_regex('REGEX_COLUMN')], params=['TEXT TO MATCH']).all()
其中
sql\u regex()
代码类似于:

from django.db import backend

def sql_regex(column, type='regex'):
    op = backend.DatabaseWrapper.operators[type].replace('%s', column)
    return '%s ' + op

我使用了
backend.DatabaseWrapper.operators[type]
来获取预定义的模式,以查询存储在数据库后端中的正则表达式。

您没有指定两个重要的内容:

  • 你在使用什么数据库
  • 您可以在PCRE和POSIX正则表达式之间切换吗
假设您使用的数据库允许使用正则表达式执行查询,并且您的数据库支持所需的标准(PCRE/POSIX),那么您可以使用。请看下面的代码:

Model.objects.extra(where=[sql_regex('REGEX_COLUMN')], params=['TEXT TO MATCH']).all()
其中
sql\u regex()
代码类似于:

from django.db import backend

def sql_regex(column, type='regex'):
    op = backend.DatabaseWrapper.operators[type].replace('%s', column)
    return '%s ' + op

我使用
backend.DatabaseWrapper.operators[type]
来获得预定义的模式,以查询存储在数据库后端中的正则表达式。

通过使用两个
进行m*n次迭代。m-字数,n-正则表达式数。我认为没有更快的办法。你想解决什么任务?我想匹配一个用户的简短短语,比如说“需要啤酒”。。。我将去掉“a”(这是无用的),并在我的模型行中搜索需求和啤酒。对于任何较大的输入或行数,这将是非常缓慢的-基本上是一种蛮力方法。这些行实际上代表什么?使用两个
循环进行m*n次迭代。m-字数,n-正则表达式数。我认为没有更快的办法。你想解决什么任务?我想匹配一个用户的简短短语,比如说“需要啤酒”。。。我将去掉“a”(这是无用的),并在我的模型行中搜索需求和啤酒。对于任何较大的输入或行数,这将是非常缓慢的-基本上是一种蛮力方法。这些行实际上代表什么?是的。。你是对的,完成这项任务似乎非常缓慢,也不可能进行优化。我会试试更好的办法是的。。你是对的,完成这项任务似乎非常缓慢,也不可能进行优化。我会尝试一个更好的方法我现在正在使用MySQL。。。我不知道如何检查你问我的第二个问题..MySQL内置正则表达式支持使用POSIX ERE,有关更多信息,请查看以下链接:我目前正在使用MySQL。。。我不知道如何检查你问我的第二个问题..MySQL内置regex支持使用POSIX ERE,有关更多信息,请查看以下链接: