c# - MongoDB 中的正则表达式 + 选项(C# 驱动程序)

标签 c# regex database mongodb

我正在使用 C# 的 MongoDB 驱动程序,我正在查询以从集合中获取与字段匹配的项目列表。
我正在使用带有以下表达式的 BsonRegularExpression 对象:

"/.*" + summonerName + "/"
这相当于 Sql 中的 LIKE,但是当我希望它不区分大小写时问题就来了。
为此,许多网站评论说它必须是这样的:
BsonRegularExpression expReg = new BsonRegularExpression("/.*" + summonerName + "/", "i");
当我把这样的选项参数放在表达式后面时:“i”,它只是不返回任何东西。
我把整个代码留在这里:
public static List<Summoner> GetSummonerByName(String summonerName)
    {
        try
        {
            var database = dbClient.GetDatabase(databaseName);
            var collection = database.GetCollection<Summoner>(collectionSummoner);

            String nombreRegex = "";
            var nombreChar = summonerName.ToCharArray();
            foreach(Char caracter in nombreChar)
            {
                nombreRegex += "*";
                nombreRegex += caracter;
            }

            //var filter = Builders<Summoner>.Filter.Regex(u => u.name, new BsonRegularExpression("/.*C*o*r*b*a*n/"));
            BsonRegularExpression expReg = new BsonRegularExpression("/.*" + summonerName + "/");
            var filter = Builders<Summoner>.Filter.Regex(u => u.name, expReg);

            var resultado = collection.Find(filter).ToList();

            if(resultado.Count() == 0)
            {
                InsertSummoner(RiotApiConnectorService.GetSummonerByName(summonerName));
                GetSummonerByName(summonerName);
            }

            return resultado;
        }
        catch (Exception error)
        {
            return null;
        }
    }
有没有人在 C# 中的 mongo 驱动程序中使用正则表达式?
提前致谢!

最佳答案

你应该把它定义为

BsonRegularExpression expReg = w BsonRegularExpression(Regex.Escape(summonerName), "i")
这里的重点是 BsonRegularExpression正则表达式定义不应包含正则表达式分隔符,/在你的情况下。使用 BsonRegularExpression 执行正则表达式实例化类,并且正则表达式分隔符只是多余的,在这里被视为文字 /在图案中。没有匹配项,因为您的数据没有斜线。
接下来就不需要.*这里因为正则表达式在输入文本的任何位置搜索匹配,它不需要完整的字符串匹配(与 LIKE 运算符的情况一样)。
备注 Regex.Escape(summonerName)仅在 summonerName 中存在特殊正则表达式元字符时才使用,如果不使用该方法,搜索可能会失败。

关于c# - MongoDB 中的正则表达式 + 选项(C# 驱动程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65618023/

相关文章:

python - Pandas to_sql 如何确定将哪个数据框列放入哪个数据库字段?

Python+sqlite : the LIKE query with wildcards

php - 如何使用php在数据库中插入动态添加的表单字段

C# 模式匹配 Task<T> 并获取它的值

c# - 如何只分析一个类库?

regex - 从字符串中提取年份的正则表达式

regex - Perl 替换字符串中的第 n 个子字符串

c# - 简单的程序不工作

c# - App.Config 停止创建

regex - 在 Vim 中添加正则表达式搜索列表