Я немного заржавел, но я предлагаю "предостережения".Прежде всего, regexp (s) входят в различные диалекты.Об этом есть фантастическая книга О'Рейли, но есть вероятность, что ваша утилита C # применяет немного другие правила.
В качестве примера я использовал похожий (но другой инструмент )и обнаружил, что он по-разному разбирает вещи ...
Прежде всего он отклонил ваше регулярное выражение (может быть, опечатку?), начальный "*" не имеет смысла, если вы не поставите точку (.) передэтогоВот так:
.*;BYDAY=(?:([+-]?[0-9]*)([A-Z]{2}),?)*.*
Теперь он был принят, но он "соответствовал" только части 2 / WE и "пропустил" пару 2 / TU.
(предлагаю прочитатьо жадном и не жадном сопоставлении, чтобы понять это немного лучше.
Поэтому я обновил ваш шаблон следующим образом:
.*;BYDAY=(?:([+-]?[0-9]*)([A-Z]{2}),?),(?:([+-]?[0-9]*)([A-Z]{2}),?)*.*
И теперь он работает и правильно захватывает 2, TU, 2 иМЫ.
Может, это поможет?