正则表达式获得所有匹配的位置

时间:2013-12-17 08:34:29

标签: c# regex

我们来看看这段代码

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

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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 :(得分:2)

  

返回一个新的Match对象,其中包含下一个匹配的结果,从最后一个匹配结束的位置开始(在最后一个匹配的字符后面的字符处)。

Match.NextMatch

更简单的方法是循环遍历所有Matches