Регулярное выражение с двумя условиями

У меня есть список строк, в которых указаны номер, дата начала и окончания недели. Мне нужно из этих строк получить номер, дату начала и дату окончания недели. В случае если хотя бы что-то отсутствует, то игнорировать такую строку.

Вот пример списка:

  • Неделя 1 (29.08-05.09)
  • Неделя 2 (25.08-16.09)
  • Неделя (29.08-03.10) //не подходит, нету номера недели
  • Неделя 4 (29.08-03.09)
  • Неделя 1 (11.08-) //не подходит, нету даты окончания

Сейчас у меня есть такое выражение: @"\d{2}.\d{2})|\d". С его помощью я могу получить требуемые данные из подходящих строк, но в то же время оно не игнорирует неподходящие строки


Ответы (1 шт):

Автор решения: Left Mail
using System.Text.RegularExpressions;

string pattern = @"Week\s(?<week>\d+)\s\((?<start>\d{2}\.\d{2})-(?<end>\d{2}\.\d{2})\)";

string[] lines = {
    "Week 1 (29.08-05.09)",
    "Week 2 (25.08-16.09)",
    "Week 3 (29.08-03.10)",
    "Week 4 (29.08-03.09)",
    "Week 1 (11.08-)"
};
foreach (string line in lines)
{
    Match match = Regex.Match(line, pattern);
    if (match.Success)
    {
        string week = match.Groups["week"].Value;
        string start = match.Groups["start"].Value;
        string end = match.Groups["end"].Value;
        Console.WriteLine("Week: {0}, Start date: {1}, End date: {2}", week, start, end);
    }
}
→ Ссылка