2013-12-17 72 views
3

讓我們這個代碼片斷正則表達式來獲取所有匹配的位置

var input = @" 
a:1 
b:22 

a:3 
b:44 
"; 

var pattern = @"b:([^\n]+)\n"; 
var match = Regex.Match(input, pattern); 

而結果我在比賽得到的是在下面的快照。

我們如何獲得b的值列表,例如{22,44}?

我只能看到22

enter image description here

+0

名單應該有一個NextMatch方法 –

+0

就個人而言,我寧願做兩個裂口(一個在'Environment.Newline',一個在':')比在這裏使用正則表達式。 –

+1

你可以使用'Matches'而不是'Match'。 –

回答

5

使用Regex.Matches方法,而不是Regex.Match。下面是從MSDN

string pattern = "a*"; 
string input = "abaabb"; 

foreach (Match m in Regex.Matches(input, pattern)) 
    Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index); 

一個例子,如果你想匹配的值

Regex.Matches(input, pattern).Select(m => m.Value).ToList(); 
2

後返回的結果,爲下一場新的比賽對象,開始在在其最後一場比賽結束的位置(在字符最後匹配的字符)。

Match.NextMatch

什麼能更容易,是剛剛通過的所有Matches循環。

6

代替Match,使用Matches方法獲取多個匹配一氣呵成:

var matches = Regex.Matches(input, pattern); 

for (int i = 0; i < matches.Count; i++) 
{ 
    var value = matches[i].Value; 
} 

或使用foreach語法:

foreach (Match match in matches) 
{ 
    var value = match.Value; 
} 
+0

@WouterHuysentruit不,他的意思是'foreach(比賽匹配)'。 –

+0

是的,謝謝。最終的結果是一樣的,你可以用不同的方式達到同樣的目標。 – Szymon

相關問題