0

私が達成しようとしているのは、needle文字で始まる/終わる行数を表示することです。

私のコードはそのように見えます

case "Starting with":
    count = File.ReadLines(openFileDialog1.FileName)
                .Count(line => Regex.IsMatch(line, "^" + needle + ".*$"));
    break;
case "Ending with":
    count = File.ReadLines(openFileDialog1.FileName)
                .Count(line => Regex.IsMatch(line, "^.*" + needle + ".*$"));
    break;

finds right count で始まるが、not で終わる。私は何が欠けていますか?

4

2 に答える 2

6

なぜこれに正規表現を使用するのですか? が実際に正規表現でない限り、 string.EndsWith(およびstring.StartsWith) を使用するだけです。(質問では「文字」と言及しています...ユーザーが入力した文字の場合、ユーザーが「。」と入力すると、予期しない結果が生じる可能性があります。例えば。)needle

編集:あなたが持ってneedleいると仮定するとstring(例えば from textBox.Text

case "Starting with":
    count = File.ReadLines(openFileDialog1.FileName)
                .Count(line => line.StartsWith(needle))
    break;
case "Ending with":
    count = File.ReadLines(openFileDialog1.FileName)
                .Count(line => line.EndsWith(needle))
    break;

ReadLines(必要に応じて、述語を変数に割り当ててからandCountを 1 か所で呼び出すだけで、ここで共通の機能を抽出できることに注意してください。)

于 2012-07-04T20:33:39.120 に答える
1

パターンの末尾にある .* を削除します。

Regex.IsMatch(line, "^.*" + needle + "$"));
于 2012-07-04T20:33:03.883 に答える