MongoDB / PyMongo:如何在正则表达式搜索中“转义”参数?

时间:2012-11-05 01:14:04

标签: regex mongodb pymongo

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

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

这应该有效,但如果text是变量怎么办?我可以做类似的事情:

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

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

谢谢!

2 个答案:

答案 0 :(得分:9)

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

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

OR

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

请注意,代码使用re.escape来转义字符串,以防它包含特殊字符。

答案 1 :(得分:-1)

以下是概念:您必须使用regex

items = collection.find({
     'key' : {
         $regex : yourRegex
     }
})