【问题标题】:Filtering Django data by dictionary and regular expression?通过字典和正则表达式过滤Django数据?
【发布时间】:2021-07-11 16:45:30
【问题描述】:

我试图通过字典和正则表达式的组合来过滤 Django 数据。所以我的字典是这样的:

dict = {key: r'.*?' + value + '.*?$'} 

我将键和值作为字符串变量。

我想过滤数据,使我检索到的所有行的键索引值都包含字符串值。

table.objects.all().filter(**dict) 

但是,这并没有给我想要的行;事实上,它根本没有给我任何行,而所有带有索引键的行都应该显示出来。对于这里可能出现的问题以及如何开始修复它,我将不胜感激。谢谢!

编辑:我更喜欢使用字典方法进行过滤,因为我将要过滤的键作为 URL 参数中给定的子字符串。如果您认为还有其他方法可以从 URL 中检索字符串并执行以下操作:

table.objects.all().filter(key: r'.*?' + value '*?$' ). 

我也会很感激,只是不确定如何做到这一点,因为我只有可变键作为字符串!

编辑:键是“城市”,值是“费城”,我正在寻找索引为“城市”=“费城”但没有显示的行。

【问题讨论】:

  • 这里变量keyvalue的值究竟是什么?
  • dict = {key: r'.*?' + value '*?$'} 是一个有效的字典吗? value 后面不是缺少 + 吗?
  • @Dr.Regex 抱歉,这是我的错字!我把它改成了 {key: r'.*?' + 值 + '.*?$'}。但是,它仍然不起作用。
  • 为什么不直接使用key__contains 方法呢?
  • @Đỗ Nguyên Tùng 是的,可以。

标签: python django regex database web


【解决方案1】:

您说key"city"value"Philadelphi",如果我们在查询中替换这些,您基本上会这样写:

table.objects.all().filter(city= r'.*?Philadelphi*?$')

如果问题尚不可见,那么当不指定查找时,它会自动假定为exact 查找,您希望使用regexiregex 查找。此外,当您将其放入正则表达式时,您应该转义您的值:

import re

key = '%s__iregex' % key
value = r'.*?%s.*?$' % re.escape(value)
dict = {key: value}

table.objects.all().filter(**dict)

正如 cmets 中所建议的,您的正则表达式似乎与 contains 查找没有什么不同,因此除非您有一些不同的正则表达式,否则您应该使用:

key = '%s__contains' % key
dict = {key: value}

table.objects.all().filter(**dict)

【讨论】:

  • 谢谢!这对我有用。请问key = '%s__iregex' % key这行是做什么的?是否指定每当我使用该键查找时,我想将正则表达式应用于我正在查看的值?
  • @ĐỗNguyênTùng 因为key 最初是"city",然后运行key = '%s__iregex' % key 会将其设置为"city__iregex"__ 是分隔查找的方式,如果要使用正则表达式,请使用 regexiregex(不区分大小写)。 string % some_variable 只是一些用于格式化字符串的普通 python 语法,它看起来比连接更优雅。你也可以使用像key = f"{key}__iregex"这样的f-strings,还有format方法等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 2012-11-15
相关资源
最近更新 更多