2012-11-05 25 views
6

我使用pymongo並希望搜索以特定字符序列開始的項目。我可能會這樣實現:MongoDB/PyMongo:如何在正則表達式搜索中「逃避」參數?

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

這應該可以,但如果text是一個變量呢?我可以這樣做:

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

但現在如果variable文本包含有特殊意義的正則表達式的任何字符(如$),查詢不再像預期。 有沒有辦法做某種參數綁定?我需要自己清潔variable嗎?這甚至可靠嗎?

謝謝!

回答

7

您必須以編程方式組裝正則表達式。因此,要麼:

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

OR

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

注意,代碼使用re.escape逃避情況下,它包含特殊字符的字符串。

+0

我看到您編輯您的文章在同一時間,我提交了我的答案。看起來我們都得出了同樣的結論:使用're'模塊。謝謝! – Sam

-1

這裏的理念是:你必須使用regex

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