如何使用pymongo在mongodb查询中实现含有{m,n}的正则表达式?

4
我想要统计一个特定字段中字符数为特定数量的文档数量,我使用正则表达式实现这一目标:
total_count = db.collection.count({'field': {'$regex': '^pattern{m,n}$'}})

这个失败了。 问题出在mongodb/pymongo的{m,n}语法上,因为以下内容可以得到好的结果:

total_count = db.collection.count({'field': {'$regex' : '^pattern+'}})

表达式'/^pattern{m,n}$/ '在其他应用中运行良好(已在http://www.regexr.com/上测试)。

在我的情况下,pattern = [0-9a-zA-Z \W],但这不应该与此有关。

1个回答

2

您需要使用re.compile函数编译您的正则表达式模式,以便生成一个正则表达式对象。

import re
pat = re.compile(r'^pattern{n, m}$')
total_count = db.collection.count({'field': {'$regex': pat}})

哇,谢谢!这真的有效。虽然我觉得有点惊讶,因为我以为 MongoDB 已经内置了一个正则表达式编译器,所以我认为这是不必要的重复... 我原本以为在使用正则表达式的“选项”时,预先重新编译(在 Python 中)才是必要的... 你能详细说明一下为什么你的答案有效吗? https://dev59.com/RnA75IYBdhLWcg3wFE2b - annakeuchenius
请@annakeuchenius阅读已接受答案的第一条评论和第二个答案。 - styvane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接