2017-05-07 45 views
0

我有字符串值,看起來像這樣的列表:正則表達式發現這個重複的值設置

GREEN,BLUE,BLUE 
BLUE,BLUE,GREEN 
GREEN,RED,RED 
RED,BLUE,BLUE 
BLUE,RED,RED 
GREEN,BLUE,BLUE 
RED,GREEN,BLUE 

我會用一個foreach循環通過每一行,並找到獨特的價值。

我需要一個返回true的正則表達式是沒有顏色重複(紅色,綠色,藍色)和錯誤,如果有顏色重複(紅色,綠色,紅色)。

正則表達式會是什麼樣子?

+2

正則表達式似乎不喜歡這份工作的最佳工具......我會比較'Count'列表和不同列表之間。 –

+0

@DeanFenster我從未使用過不同的列表。你能否詳細說明一下? – Json

+1

你真的不想使用'if(!Regex.IsMatch(s,@「\ b(\ w +)\ b(?=。* \ b \ 1 \ b)」)){return true;}' –

回答

3

您可以嘗試使用的LINQ而不是正則表達式

using System.Linq; 

    ... 

    string source = "BLUE,BLUE,GREEN"; 

    // do we have three distinct items? 
    bool allDistinct = source.Split(',').Distinct().Count() >= 3; 

測試:

List<string> list = new List<string>() { 
    "GREEN,BLUE,BLUE", 
    "BLUE,BLUE,GREEN", 
    "GREEN,RED,RED", 
    "RED,BLUE,BLUE", 
    "BLUE,RED,RED", 
    "GREEN,BLUE,BLUE", 
    "RED,GREEN,BLUE", 
}; 

var result = list 
    .Select(source => $"{source,-15} {source.Split(',').Distinct().Count() >= 3}"); 

Console.Write(string.Join(Environment.NewLine, result)); 

結果:

GREEN,BLUE,BLUE False 
BLUE,BLUE,GREEN False 
GREEN,RED,RED False 
RED,BLUE,BLUE False 
BLUE,RED,RED False 
GREEN,BLUE,BLUE False 
RED,GREEN,BLUE True 

編輯:的LINQ可以幫助在廣義情況:

bool allDistinct = !source 
    .Split(',') 
    .GroupBy(item => item, (k, s) => s.Skip(1).Any()) 
    .Any(item => item); 
+0

這很好,歡呼! – Json

+1

我真的應該投入更多的時間來學習更多關於Linq的知識,它確實是一個非常強大的工具! – Json

+0

@Json:不客氣!是的,Linq值得研究;) –