自动为文本框中的每一行编号

时间:2013-03-06 21:55:48

标签: c# .net regex

我想自动为用户放入文本框的每一行编号,并将结果显示在另一个文本框中。

转动这个
blah blah blah
some stuff to be numbered
more stuff to number

到此 1 blah blah blah
2 some stuff to be numbered
3 more stuff to number

到目前为止,我有 output.Text = Regex.Replace(input.Text, input.Text, @"{1,}+");

但这会用{1,}替换所有文字 我似乎无法弄清楚在放置数字和空格后如何循环每一条线 (我是c#的新手)
有什么建议吗?

3 个答案:

答案 0 :(得分:2)

为什么不只是split \r\n,将string[]的每一行连接一个增加的数字和一个空格,然后join连接\r\n

答案 1 :(得分:2)

实施非正则表达式解决方案可能更简单:

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

答案 2 :(得分:0)

如果您是C#的新手,请尽量保持简单。

从它的外观来看,你已经拥有了所有的琴弦。所以归结为:

        // store all lines in a list
        // ...

        var list = new List<string> {"blah", "blah2", "and some more blah"};
        var list2 = new List<string>();
        var i = 1;
        foreach (var str in list)
        {
            list2.Add(string.Format("{0} {1}", i, str));
            i++;
        }

        // write contents of list2 back to wherever you want them visualized