9

我正在使用 pymongo 并希望搜索以特定字符序列开头的项目。我可能会这样实现:

items = collection.find({ 'key': '/^text/' })

这应该可以,但是如果text是一个变量呢?我可以做类似的事情:

items = collection.find({ 'key': '/^' + variable + '/' })

但是现在如果 in 中的文本variable包含任何具有特殊正则表达式含义的字符(例如$),则查询不再按预期运行。有没有办法进行某种参数绑定?我必须给自己消毒variable吗?这甚至可靠吗?

谢谢!

4

2 回答 2

13

您必须以编程方式组装正则表达式。所以要么:

import re
regex = re.compile('^' + re.escape(variable))
items = collection.find({ 'key': regex })

或者

items = collection.find({'key': { '$regex': '^' + re.escape(variable) }})

请注意,代码用于re.escape对包含特殊字符的字符串进行转义。

于 2012-11-05T01:19:50.873 回答
-2

这是概念:您必须使用正则表达式

items = collection.find({
     'key' : {
         $regex : yourRegex
     }
})
于 2012-11-05T01:20:06.423 回答