2013-12-17 65 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

相关问题