python - 使用不区分大小写的文本查询 pymongo

标签 python regex mongodb pymongo

以下是我如何使用 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

事实上,我想使用不区分大小写选项查询具有特定facebook_user的记录。但是,查询返回许多不正确的结果。 例如,如果 facebook_userWWF,则将返回带有 WWF_XYZ 的记录。

我该如何解决这个问题? 谢谢。

最佳答案

使用以下修复:

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

请参阅regex demo .

图案详细信息:

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

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

re.compile(r'(?<!\w)@{0}(?!\w)'.format(re.escape(facebook_user)), re.IGNORECASE)

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

关于python - 使用不区分大小写的文本查询 pymongo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44471387/

相关文章:

python - pytest 是否有类似 google test 的非致命 EXPECT_* 行为?

python - 如何从 Twisted 的 deferToThread API 向 Deferred 添加超时?

python - 如何使用 scikit-learn 将数据转换为适合多类分类任务的格式?

javascript - 从字符串中删除软连字符

java - IPv6 验证

node.js - 在mongodb中创建不同类型的用户

mongodb - 带有自定义标签的Docker图像提取

python - 如何按时间读取日志文件并提取不包含数据信息的特定行

regex - Perl 给定字符串中正则表达式的所有匹配项

mongodb - mongod src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 无文件