非正規表現ソリューションを実装する方が簡単かもしれません:
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