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;

从找到正确的计数开始,但以不结束。我错过了什么?

4

2 回答 2

6

为什么要为此使用正则表达式?只需使用string.EndsWith(and string.StartsWith),除非needle实际上正则表达式。(您在问题中将其称为“字符”......如果它是用户输入的字符,如果用户输入“。”,您最终可能会得到一些意外结果。)

编辑:假设你有needle一个string(例如来自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和。)Count

于 2012-07-04T20:33:39.120 回答
1

删除模式末尾的 .* :

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