在Linq中查找正则表达式匹配的索引

时间:2012-09-05 13:56:31

标签: c# regex linq dictionary indexing

我有一个字典定义为Dictionary<int, Regex>。这里有许多已编译的Regex对象。这是使用C#.NET 4完成的。

我正在尝试使用Linq语句来解析字典并返回一个对象,该对象包含所有字典键以及在指定文本中找到每个正则表达式的索引。

ID返回正常,但我不确定如何获取找到文本的位置。有人可以帮助我吗?

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

2 个答案:

答案 0 :(得分:2)

使用Index类的Match属性,而不是简单的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

答案 1 :(得分:0)

您可以尝试使用基于List<T>.IndexOf方法的代码。

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