2014-03-12 46 views
0

我使用MVC3,C#,.net4.0如何在ASP.NET的C#中進行通配符搜索?

我有包含與我可以用它來搜索相關的對象的搜索字符串,即4個對象的對象:

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

我會喜歡搜索具有「vw」和「1800」引擎的對象。

我可以嘗試包含():

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()本身。

我有一個很好的理由使用這樣的搜索字符串,但這不是問題的一部分。

+1

你嘗試'Regex.IsMatch()'? – Loetn

回答

3

您可以使用正則表達式來檢查SearchString是否匹配。 .*表示零個或多個任意字符,用於代替通配符。

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

感謝您的支持。是的,正則表達式可能對我的需求非常強大。我正在實現規則處理器,規則存儲在數據庫中,因此「Regex.IsMatch(SearchString,pattern)」是規則。需要玩這個,可能會很強大。出於興趣,這是嘗試實現這一目標的唯一簡單方法?我只能在存儲的表達式中使用主流函數才能使規則起作用。我使用FLEE。太好了。 – SamJolly

+3

@SamJolly我很確定這不是唯一的方法,但使用正則表達式是一個簡單而強大的方式**如果使用正確**。只是不要試圖用正則表達式來解決所有問題。 – Szymon

+0

@Szymon - 對於這些類型的問題,使用正則表達式是不恰當的選擇? – user3241191

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

好的,謝謝你。稍微囉嗦。我認爲正則表達式更合適。 – SamJolly

相關問題