1

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

转这个
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# 新手)有
什么建议吗?

4

3 回答 3

2

为什么不只是splitby \r\n,将 的每一行string[]与递增的数字和空格连接起来,然后join通过\r\n

于 2013-03-06T21:58:51.910 回答
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

于 2013-03-06T22:00:09.707 回答
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
于 2013-03-06T22:00:54.880 回答