实现非正则表达式解决方案可能更简单:
var numberedLines = input.Text
    .Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None)
    .Select ((line, index) => (index + 1) + " " + line)
    .ToArray();
var result = string.Join(Environment.NewLine, numberedLines);
output.Text = result;
第一行用于string.Split()将围绕行返回的字符串拆分为一个数组。然后我使用 LINQ.Select方法对数组中的每个元素应用一个函数——在这种情况下,在每行的开头添加行号和空格(index + 1因为索引值是从 0 开始的,所以这是必要的)。然后我使用string.Join方法将数组重新组合成一个字符串。
演示:http: //ideone.com/DrFTfl
MatchEvaluator如果您使用委托来应用行号,它实际上可以使用正则表达式完成:
var index = 1;
output.Text = Regex.Replace(input.Text, "^",
    (Match m) => (index++).ToString() + " ",
    RegexOptions.Multiline);
该模式^通常匹配表达式的开头。但是,RegexOptions.Multiline它与每行的开头匹配。然后为了替换,我使用了一个委托(匿名函数),将#+ 空格添加到行的开头,然后为下一行增加索引计数器。
演示:http: //ideone.com/9LD0ZY