Мне не ясно, хотите ли вы проверить ввод и просто сопоставить ввод или хотите извлечь данные.
Если вам просто нужно сопоставить ввод, чтобы проверить его, то:
^tcm:\d+(-\d+){1,2}$
Будет соответствовать только если есть 2 или 3 группы цифр, не меньше, не больше.
Если вам необходимо учесть возможные пробелы, вы можете изменить регулярное выражение следующим образом:
^tcm\s*:\s*\d+\s*(-\s*\d+){1,2}\s*$
Если вы хотите извлечь каждый набор цифр:
В Perl вы бы использовали массив @result
, который содержал бы 2 или 3 группы цифр, только если весь шаблон соответствовал (строка subject
содержит строку, из которой вы хотите извлечь данные). 1019 *
my @result = $subject =~ /^tcm:(\d+)-(\d+)(?:-(\d+))?$/;
В C # вы можете сделать эквивалентную вещь:
MatchCollection results = null;
Regex r = new Regex(@"^tcm:(\d+)-(\d+)(?:-(\d+))?$");
results = r.Matches(subject);
if ((results.Count == 2) || ((results.Count == 3))) {
// use results.Item[] to access each group of digits
} else {
// The subject doesn't match
}