3

として定義された辞書がありDictionary<int, Regex>ます。この中には、コンパイルされた正規表現オブジェクトがいくつかあります。これは、C#.NET4を使用して行われました。

Linqステートメントを使用して辞書を解析し、すべての辞書キーと、指定されたテキストで各正規表現が見つかった場所のインデックスを含むオブジェクトを返そうとしています。

IDは正常に返されますが、テキストが見つかった場所の場所を取得する方法がわかりません。誰かが私を助けることができますか?

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

2 に答える 2

2

simpleを実行する代わりに、クラスのIndexプロパティを使用します。MatchIsMatch


例:

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(); 
}

結果

ここに画像の説明を入力してください

于 2012-09-05T14:00:00.837 に答える
0

List<T>.IndexOfメソッドに基づいてこのコードを試すことができます。

.Select(y => new MyReturnObject()
        {
            ID = y.Key,
            Index = YourDictionary.Keys.IndexOf(y.Key)
        });
于 2012-09-05T14:04:51.110 に答える