在 pymongo 中搜索时忽略一个特定或任何特殊字符

Posted

技术标签:

【中文标题】在 pymongo 中搜索时忽略一个特定或任何特殊字符【英文标题】:Ignoring one specific or any special character while searching in pymongo 【发布时间】:2019-05-18 05:50:58 【问题描述】:

所以我的 mongodb 中有一些产品如下所列

    圣诞老人糖果 赫利甜 质量上乘

现在我得到的搜索是小写的,有时可能带有特殊字符或没有特殊字符。那么如何构建一个可以准确给出输出的查询呢?例如,如果用户输入了“quality sweet”,那么它应该匹配我的 mongodb 中的“Quality-Sweet”。如果用户以大写形式输入了“HERLEYS SWEET”,那么它应该匹配“herleys sweet”(如上图在我的 MongoDB 中所示)

db.product.find("Product":re.compile('^' + re.escape(pr) + '$',re.IGNORECASE))

我有上面的查询,它适用于大写或小写,但如果用户正在搜索“herleys-sweet”之类的东西,那么它就不起作用了。

【问题讨论】:

【参考方案1】:

您可以做的一件事是使用re.sub() 函数将特殊字符替换为其他字符。

你可以有这样的东西:

db.product.find("Product":re.compile('^' + re.sub('[<list of special characters>]', '<string to replace with>', pr) + '$',re.IGNORECASE))

例如:

创建特殊字符列表:[\-\_\~\!\\\/\^\$\%]

选择用什么替换特殊字符。可以是空格' ' 或任何.*

那么,你会:

db.product.find("Product":re.compile('^' + re.sub('[\-\_\~\!\\\/\^\$\%]', '.*', pr) + '$',re.IGNORECASE))

【讨论】:

感谢您提供宝贵的解决方案。这解决了我的问题。 Qudos 给你。

以上是关于在 pymongo 中搜索时忽略一个特定或任何特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pymongo 创建索引 [重复]

Grails内部结合了“ in”和“ isEmpty”,或忽略了“ isEmpty”]]

SVN同步时忽略特定文件或文件夹

如何通过忽略字符串前面的特殊字符从文本中提取正确的字符串?

替换所有连续重复的字母,忽略特定的单词

Swift忽略大小写搜索子字符串的三种方法及性能对比