如何在ASP.NET上的C#中进行通配符搜索?

时间:2014-03-12 11:53:48

标签: c# .net c#-4.0

我正在使用MVC3,C#,。net4.0

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

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

我想搜索有" vw"和" 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()本身。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

一般来说,我更喜欢正则表达式 在您的特定情况下,您可以使用以下内容:

        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");