python - django 查询集正则表达式给出额外的结果

标签 python mysql sql regex django

我正在尝试对 django 查询集进行正则表达式查询。我有一列具有类似

的值

'67,42,16', '16,42,67,70', '4,11,21,78', '12,45,6,22'

我想提取其中包含“4”或“70”的列。这是我的正则表达式

 _regex = r"(^|(\d*,)+)%s((,\d*)+|$)" %('4|70')

和我的查询

dict(Table.objects.filter(column__regex=_regex).values_list('row_id','column'))

它返回以下结果

{1563864L: u'67,42,16', 1563804L: u'16,42,67,70', 1563863L: u'4,11,21,78'}

我期待这个结果1563804L: u'16,42,67,70', 1563863L: u'4,11,21,78'

不确定为什么我会得到 1563864L: u'67,42,16' 结果

任何帮助将不胜感激。提前致谢

最佳答案

我只能猜测你想做什么,因为扭转正则表达式的原始意图总是很困难。试试这个。

_regex = '(^({0}),.+)|(.+,({0}),.+)|(.+,({0})$)'.format('4|70')

还有一点Pythonic:

acceptable_values = [4, 70]
regex_template = '(^({0}),.+)|(.+,({0}),.+)|(.+,({0})$)'
_regex = regex_template.format('|'.join([str(v) for v in acceptable_values]))

关于python - django 查询集正则表达式给出额外的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23995219/

相关文章:

Python最准确测量时间(毫秒)的方法

组上的 MySQL COUNT() 返回错误的行数

mysql - 如何使用 mysql 查询分割这个字符串?

mysql - 从一个表中返回与其他表不匹配的单行

python - 如何优化这个算法来重复查找和更新数组的最小值?

python - 如何更有效地存储距离矩阵?

python - Gensim Doc2Vec 异常 AttributeError : 'str' object has no attribute 'decode'

mysql - 具有空值的存储过程搜索

带有 case 语句的 Mysql SUM

sql - 在 Oracle 中强制使用索引