使用不区分大小写的tex查询pymongo

2024-09-23 22:18:39 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是如何使用pymongo从mongodb查询数据:

def is_philippine_facebook(self,facebook_user):
        is_philippine = False
        db_server = self.ConfigSectionMap('db_server')
        database_name = db_server['database']
        db = self.client[database_name]
        cursor = db[collection_name].find({
                'isPhilippine':True,
                'facebook_user': re.compile('@'+facebook_user, re.IGNORECASE)
            })
        for document in cursor:
            if document is not None:
                is_philippine = True
                break
        return is_philippine

事实上,我想用case insensitive选项查询具有某个facebook_user的记录。但是,查询返回许多不正确的结果。 例如,如果facebook_userWWF,则返回带有WWF_XYZ的记录。在

我该怎么解决这个问题? 谢谢。在


Tags: nameselfretruedbfacebookserveris
2条回答

听起来你想要一个单词边界\b

'facebook_user': re.compile('@'+ facebook_user +'\\b', re.IGNORECASE)

因此,如果您提供WWFwwf,那么它只匹配到“单词”的末尾,而不是超出它。在

需要注意的是,不区分大小写的搜索不使用插入符号^锚定到字符串开头的搜索需要完全的集合扫描,而且效率不高。在

如果匹配到字符串的开头,您应该使用插入符号,并且您可能应该将大小写规范化为文档属性进行搜索,这样您也不需要“不区分大小写”选项。在搜索中使用索引需要这两个条件。请参阅文档中的^{}

使用以下修复:

re.compile(r'@{0}\b'.format(facebook_user), re.IGNORECASE)

参见regex demo。在

图案细节

  • @WWF-文字@WWF
  • \b-单词边界(需要字母、数字或_以外的字符,或@WWF之后的字符串结尾)

如果facebook_user可能包含特殊字符,则需要使用

^{pr2}$

但是,facebook_user似乎只包含单词字符,因此在这种情况下,单词边界应该就足够了。在

相关问题 更多 >