如何在ASP.NET上使用c#进行通配符搜索

本文关键字:通配符 搜索 ASP NET | 更新日期: 2023-09-27 17:49:37

我使用mvc, c#, .net4.0

我有一个包含搜索字符串的对象,我可以用它来搜索相关对象,即4个对象:

[car:vw:engine:1800]
[car:vw:engine:Diesel 1800]
[car:vw:engine:1600]
[car:ford:engine:1800]

我想搜索引擎为"vw"answers"1800"的对象。

我可以试试Contains():

SearchString.Contains("vw:engine:1800")

只返回一个对象。

我需要这样的东西:

SearchString.Contains("vw:engine:*1800")

其中*是一个通配符,它将拾取:

[car:vw:engine:1800]
[car:vw:engine:Diesel 1800]

目前唯一的解决方法是:

SearchString.Contains("vw:engine:1800") or 
SearchString.Contains("vw:engine:Diesel 1800")

如果没有Contains()本身,是否有一种简单的方法可以使用主流的。net函数如Contains()来做到这一点?

我使用这样的搜索字符串有一个很好的理由,但这不是问题的一部分。

如何在ASP.NET上使用c#进行通配符搜索

可以使用正则表达式检查SearchString是否匹配。.*表示零个或多个字符,用于代替通配符。

string pattern = @"^'[car:vw:engine:.*1800]$";
bool matches = Regex.IsMatch(SearchString, pattern);

一般来说我更喜欢正则表达式。
在你的特殊情况下,你可以这样写:

        string car1 = "[car:vw:engine:Diesel 1800]";
        string car2 = "[car:vw:engine:1800]";
        var tokens1 = car1.Substring(1, car1.Length - 2).Split(':');
        var tokens2 = car2.Substring(1, car2.Length - 2).Split(':');
        bool IsMatch1 = tokens1[3].EndsWith("1800");
        bool IsMatch2 = tokens2[3].EndsWith("1800");