我想要实现的是显示以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;
从找到正确的计数开始,但结束于没有。我错过了什么?
答案 0 :(得分:6)
为什么要使用正则表达式?只需使用string.EndsWith
(和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
。)
答案 1 :(得分:1)
删除模式末尾的。*:
Regex.IsMatch(line, "^.*" + needle + "$"));