2011-01-08 2 views
11

У меня есть несколько матчей регулярных выражений. Как я могу поместить их в массив и называть их каждый отдельно, например ID[0] ID[1]?Как я могу поместить Regex.Matches в массив?

string value = ("{\"ID\":\"([A-Za-z0-9_., ]+)\","); 
string ID = Regex.Matches(textt, @value);` 
+1

Последнее, что я слышал 'Matches()' возвратил коллекцию, а не строку. – BoltClock

ответ

25

Вы можете сделать это уже, так как MatchCollection имеет int indexer, что позволяет получить доступ матчи по индексу. Это вполне допустимо:

MatchCollection matches = Regex.Matches(textt, @value); 
Match firstMatch = matches[0]; 

Но если вы действительно хотите, чтобы положить спички в массив, вы можете сделать:

Match[] matches = Regex.Matches(textt, @value) 
         .Cast<Match>() 
         .ToArray(); 
+0

можете ли вы разместить эквивалент vb для второго фрагмента кода выше? – Smith

+1

@Smith Try: Dim matches() As Match = Regex.Matches (textt, @value) .Cast (Of Match)(). ToArray() – Crag

+0

с использованием .net 2.0, этот приказ не поддерживается там – Smith

0

другой метод

string value = ("{\"ID\":\"([A-Za-z0-9_., ]+)\","); 
    MatchCollection match = Regex.Matches(textt, @value); 

    string[] ID = new string[match.Count]; 
    for (int i = 0; i < match.Length; i++) 
    { 
    ID[i] = match[i].Groups[1].Value; // (Index 1 is the first group) 
    } 
+0

Сложный по вторичному массиву. См. Мой ответ. – vapcguy

1

Или это комбо из последние 2 могут быть немного проще вступить .... MatchCollection можно использовать как массив напрямую - нет необходимости в вторичном массиве:

string value = ("{\"ID\":\"([A-Za-z0-9_., ]+)\","); 
MatchCollection matches = Regex.Matches(textt, @value); 
for (int i = 0; i < matches.Count; i++) 
{ 
    Response.Write(matches[i].ToString()); 
} 
Смежные вопросы