【问题标题】:MongoDB/PyMongo: how to 'escape' parameters in regex search?MongoDB/PyMongo:如何在正则表达式搜索中“转义”参数?
【发布时间】:2012-10-24 20:30:48
【问题描述】:

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

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

这应该可以,但是如果text 是一个变量呢?我可以这样做:

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

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

谢谢!

【问题讨论】:

    标签: regex mongodb pymongo


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我看到您在我提交答案的同时编辑了您的帖子。看起来我们都得出了相同的结论:使用re 模块。谢谢!
    【解决方案2】:

    这里是概念:你必须使用regex

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

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 2023-04-07
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2012-12-11
      • 2018-11-24
      • 2023-03-14
      相关资源
      最近更新 更多