2011-01-08 8 views
11

Ich habe mehrere Regex-Übereinstimmungen. Wie kann ich sie in ein Array setzen und sie einzeln aufrufen, zB ID[0] ID[1]?Wie kann ich Regex.Matches in ein Array einfügen?

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

Zuletzt hörte ich 'Matches()' gab eine Sammlung zurück, keine Zeichenfolge. – BoltClock

Antwort

25

Sie können das tun schon, da MatchCollection eine int indexer hat, die Sie durch den Index zugreifen Matches können. Das ist vollkommen gültig:

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

Aber wenn Sie wirklich die Spiele in ein Array setzen möchten, können Sie tun:

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

können Sie das vb-Äquivalent für Ihr zweites Code-Snippet oben posten? – Smith

+1

@Smith Versuchen: Dim passt() As Match = Regex.Matches (Text, @ Wert) .Cast (Of Match)(). ToArray() – Crag

+0

bin mit .net 2.0, wird diese Besetzung nicht unterstützt – Smith

0

andere Methode

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

Übermäßig kompliziert durch sekundäre Array. Siehe meine Antwort. – vapcguy

1

Oder diese Combo von der die letzten 2 könnten etwas einfacher sein ... Eine MatchCollection kann wie ein Array direkt verwendet werden - das sekundäre Array ist nicht erforderlich:

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