9

私は pymongo を使用しており、特定の文字列で始まるアイテムを検索したいと考えています。私はそれを次のように実装するかもしれません:

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

これは機能するはずですtextが、変数の場合はどうでしょうか? 私は次のようなことができます:

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

しかし、 のテキストに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 に答える