我想自动为用户放入文本框的每一行编号,并将结果显示在另一个文本框中。
转动这个
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#的新手)
有什么建议吗?
答案 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
方法将数组重新组合成一个字符串。
如果您使用MatchEvaluator
委托来应用行号,则实际上可以使用正则表达式完成:
var index = 1;
output.Text = Regex.Replace(input.Text, "^",
(Match m) => (index++).ToString() + " ",
RegexOptions.Multiline);
模式^
通常与表达式的开头匹配。但是,对于RegexOptions.Multiline
,它匹配每行的开头。然后为了替换,我使用一个委托(匿名函数),在行的开头添加#
+空格,然后为下一行增加索引计数器。
答案 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