实现非正则表达式解决方案可能更简单:
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