Двойные и однозначные числа с использованием Regex - PullRequest
1 голос
/ 09 июня 2009

У меня есть регулярное выражение:

(?:(?:CD)|(?:DISC)|(?:DISK)|(?:PART))([0-9]+)

в настоящее время это будет соответствовать CD1, DISK2 и т. Д.

Мне нужно, чтобы он тоже мог взять CD02 (с двумя цифрами), а также CD2, но мне кажется, что я могу делать только одно или другое, и мои навыки регулярных выражений довольно бесполезны.

Я использую этот код в C #

спасибо за вашу помощь

Russell

Ответы [ 4 ]

2 голосов
/ 09 июня 2009

Это работает здесь. Можете ли вы опубликовать свой код, который не работает?

Обратите внимание, что ваш Regex может быть упрощен:

bool isMatch = Regex.IsMatch("CD02", "(?:(?:CD)|(?:DISC)|(?:DISK)|(?:PART))([0-9]+)");
bool isSimplifiedMatch = Regex.IsMatch("CD02", "(?:(CD|DIS[CK]|PART))([0-9]+)");
0 голосов
/ 09 июня 2009

Может быть, вы ищете всю строку "CD2" или "CD02" в группе захвата? Как в:

string input = "CD02";
var labelMatch = Regex.Match(input, "(?:(?:CD|... // edit for brevity
if(labelMatch.Success)
{
   string labelText = mediaLabel.Groups[1].Value;
}

Возможно, вы допустили ошибку, используя выражение ?:, потому что это говорит механизму регулярных выражений, что нужно сопоставить группу, а затем удалить ее из групп захвата. Некоторые другие выражения, которые вы можете рассмотреть:

(?:CD|DISC|DISK|PART)(\d\d?)    // throws away the label, captures 1 or 2 digits
(?:CD|DISC|DISK|PART)(\d{1,2})  // ~same thing, matches exactly 1 or 2 digits
((CD|DISC|DISK|PART)\d\d?)      // captures the whole thing in group 1
0 голосов
/ 09 июня 2009

То, что будет совпадать с CD02, потому что там есть раздел "[0-9]+", что означает одну или несколько цифр.

Это будет соответствовать CD2, а не CD02, если у вас есть что-то вроде "[1-9][0-9]*".

0 голосов
/ 09 июня 2009

Кажется, это работает для меня. На самом деле я тестировал его в Regex Hero (.NET) и Regex Coach (Perl), и они оба работают. Это будет соответствовать CD2 и CD02.

Возможно, в вашем коде C # есть проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...