Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Регулярное выражение


Автор: Springtime 20.3.2010, 16:29
Всем привет!
Помогите пожалуйста составить регулярное выражение.
Есть строка вида: 63-99,1,4,53,414,8,6,6-22,3,7
необходимы значения, строки: 1,4,53,414,8,6,3,7 (\d+)
при этом исключить: 63-99,6-22 (\d+(-)+\d+)

никак не могу понять как исключить значения.

Автор: Heinzz 20.3.2010, 21:42
Код

Regex r = new Regex(@"\d+-\d+");
MatchCollection coll = Regex.Matches(r.Replace(input, ""), @"\d+"); ;

на мой взгляд, проще сначала исключить неверные варианты

Автор: diadiavova 22.3.2010, 01:38
Код

(?<![\d-])\d+(?![\d-])

Автор: Springtime 22.3.2010, 01:55
Спасибо большое.

Автор: Heinzz 25.3.2010, 19:58
Цитата(diadiavova @ 22.3.2010,  01:38)
Код

(?<![\d-])\d+(?![\d-])

блин, не могу понять как оно работает smile Если не трудно...

Автор: diadiavova 25.3.2010, 20:04
Оно находит те последовательности из цифр, вокруг которых нет последовательностей, состоящих из цифр и тире. Если сделать так
Код

(?<![-])\d+(?![-])
то к примеру из последовательности 63-99(которую надо игнорировать) таки будут выделены цифры 6 и последняя 9. Тройка и первая девятка, будут исключены из-за того, что рядом с ними тире, но крайние цифры будут распознаны, а если сделать как я показал, то они тоже будут исключены, из-за того, что рядом с ними последовательности из цифр и тире. А вот просто последовательности цифр отработают нормально. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)