2009-07-15 162 views
0

我有一個正則表達式,拉名稱值對獲取結果

([^=;]*)=([^;]*) 

"Data Source=server;Initial Database=myDB;foo=bar;" 

這工作正常,我可以使用

m.Groups[0] // "Data Source=server" 
m.Groups[1] // "Data Source" 
m.Groups[2] // "Server" 

得到的第一個結果我如何進入第二和第三組比賽?我的術語可能是錯誤的,我也會很感激幫助。

謝謝!

+0

你可以使用String.Split – eschneider 2009-07-15 23:49:37

回答

3
Regex r = new Regex("([^=;]*)=([^;]*)"); 

MatchCollection mc = r.Matches("Data Source=server;Initial Database=myDB;foo=bar;"); 

foreach (Match m in mc) 
{ 
    Console.WriteLine(m.Groups[0]); 
    Console.WriteLine(m.Groups[1]); 
    Console.WriteLine(m.Groups[2]); 
} 
0

Match.NextMatch()方法可能是你在找什麼:

 string text = "Data Source=server;Initial Database=myDB;foo=bar;"; 

    Regex re = new Regex("([^=;]*)=([^;]*)"); 

    var m = re.Match(text); 

    while (m.Success) 
    { 
     Console.Out.WriteLine("variable: {0} equals {1}", m.Groups[1], m.Groups[2]); 
     m = m.NextMatch(); 
    } 

更完整的代碼示例

1

看到這個MSDN page作爲eschneider指出,在這種情況下,正則表達式有點矯枉過正。 TIMTOWTDI

string thestring ="Data Source=server;Initial Database=myDB;foo=bar;"; 

var keyVals = from kv in thestring.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries) 
select new KeyValuePair<string,string>(kv.Split('=')[0],kv.Split('=')[1]); 

foreach (var keyVal in keyVals) { 
    Console.WriteLine(keyVal.Key); 
    Console.WriteLine(keyVal.Value); 
} 
+0

謝謝 - 很高興知道最簡單的方式做的事情...... – Sam 2009-07-16 00:15:44