2012-09-05 102 views
3

我有一個字典,定義爲Dictionary<int, Regex>。這裏有很多編譯好的Regex對象。這是使用C#.NET 4完成的。在Linq查找正則表達式匹配的索引

我試圖使用Linq語句來解析字典並返回一個包含所有字典的對象Keys和每個Regex在指定文本中找到的位置的索引。

身份證返回正常,但我不確定如何獲取文本的位置。有人可以幫我嗎?

var results = MyDictionary 
    .Where(x => x.Value.IsMatch(text)) 
    .Select(y => new MyReturnObject() 
     { 
      ID = y.Key, 
      Index = ??? 
     }); 
+0

這個問題基本上與LINQ或詞典無關。它可以被簡化。 – usr

+0

'詞典'沒有索引。 –

回答

2

使用Match類的Index屬性,而不是做簡單的IsMatch


例子:

void Main() 
{ 
    var MyDictionary = new Dictionary<int, Regex>() 
    { 
     {1, new Regex("Bar")}, 
     {2, new Regex("nothing")}, 
     {3, new Regex("r")} 
    }; 
    var text = "FooBar"; 

    var results = from kvp in MyDictionary 
        let match = kvp.Value.Match(text) 
        where match.Success 
        select new 
        { 
         ID = kvp.Key, 
         Index = match.Index 
        }; 

    results.Dump(); 
} 

結果

enter image description here

+0

這工作出色。謝謝! – Rethic

+0

截圖:VS2012的默認功能是? –

+2

@Alex號您在我的代碼中看到的網格和'Dump()'方法是[LINQPad](http://www.linqpad.net/)的一部分。 – sloth

0

您可以使用此代碼嘗試基於List<T>.IndexOf我的ThOD。

.Select(y => new MyReturnObject() 
     { 
      ID = y.Key, 
      Index = YourDictionary.Keys.IndexOf(y.Key) 
     });