Регулярки c# reg mark
bool CheckMark(string mark) Функция проверяет переданный номерной знак в формате a999aa999 (латинскими буквами) и возвращает true или false в зависимости от правильности номерного знака. Создать текстовый файл test.txt с 20 исходными верными и неверными данными для проверки работы функции. Написать программу, которая для каждой строки этого файла произведет проверку регистрационного номера и выведет на экран результат в виде: номер – true/false
Возвращает только самый первый правильный номер, после этого прекращает работу. Хотя в файле присутствуют и другие правильные номера
public static bool CheckMark(string mark)
{
string[] line = mark.Split(' ');
Regex number = new Regex(@"[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{2}[0-9]{3}$");
for (int i = 0; i < line.Length; i++)
{
if (number.IsMatch(line[i]))
{
Console.WriteLine(line[i]);
// return true;
}
return true;
}
return false;
}
=======================================
public static void Main(string[] args)
{
REG_MARK r = new REG_MARK();
string mark = @"testBilet1.txt";
StreamReader sr = new StreamReader(mark, System.Text.Encoding.Default);
string s = sr.ReadToEnd();
REG_MARK.CheckMark(s);
}
Ответы (1 шт):
У тебя на первой итерации цикла осуществляется выход из метода:
return true;
По смыслу не вижу причины что либо возвращать из метода, сделай его void и удали оба return.
Но лучше сделать тип возвращаемого параметра int, а в цикле посчитать кол-во вхождений номера в файле и возвращать это число. Как то так:
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace ExcelReaderWriter
{
class Program
{
static void Main(string[] args)
{
var text = "a999aa999 a999aa999 a999aa99!!!!";
var separator = ' ';
var mask = new Regex(@"[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{2}[0-9]{3}$");
Console.WriteLine($"Кол-во номеров: {CountMask(text, separator, mask)}");
}
static int CountMask(string text, char separator, Regex mask)
=> text.Split(separator).Count(e => mask.IsMatch(e));
}
}
Консоль:
Кол-во номеров: 2