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

splitだけではなく\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メソッドを使用して配列を 1 つの文字列に戻します。

デモ: 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 に答える