django query-set regex提供额外的结果

时间:2014-06-02 13:02:54

标签: 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'

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

1 个答案:

答案 0 :(得分:0)

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

_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]))