Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярное выражение 
:(
    Опции темы
nmn
Дата 17.2.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: 1
Всего: 1



Код

string val = @"aaaa bbbb";
            string pattern = @"(a*|b*)";

            Console.WriteLine("text: {0}", val);
            Console.WriteLine("pattern: {0}\n", pattern);

            if (Regex.IsMatch(val, pattern, RegexOptions.IgnoreCase))
            {
                MatchCollection mms = Regex.Matches(val, pattern, RegexOptions.IgnoreCase);

                foreach (Match mm in mms)
                {
                    Console.WriteLine("value: {0}", mm.Value);

                    Console.WriteLine("captures:");
                    foreach (Capture c in mm.Captures)
                        Console.WriteLine("\t{0}", c);

                    Console.WriteLine("groups:");
                    foreach (Group g in mm.Groups)
                        Console.WriteLine("\t{0}", g);
                     //*//*/*//*//*//*
                }
            }
            else Console.WriteLine("nothing");//*/


это производит такой вывод:

Код

text: aaaa bbbb
pattern: (a*|b*)

value: aaaa
captures:
        aaaa
groups:
        aaaa
        aaaa
value:
captures:

groups:


value:
captures:

groups:


value:
captures:

groups:


value:
captures:

groups:


value:
captures:

groups:


value:
captures:

groups:



почему нет bbbbb?
PM Skype   Вверх
mrbrooks
Дата 17.2.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



Код

string val = "aaaa bbbb";
string pattern = @"\S[a|b]*";
MatchCollection mms = Regex.Matches(val, pattern, RegexOptions.IgnoreCase);
//...

PM MAIL   Вверх
DjoNIK
Дата 17.2.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: нет
Всего: 5



mrbrooks, он же там еще группы пытается выделить. Разве здесь выручит обычный
Код

string pattern = @"\S[a|b]*";


Цитата(nmn @  17.2.2010,  13:47 Найти цитируемый пост)
почему нет bbbbb? 

Точно не помню, но там есть такое понятие, как жадные и ленивые квантификация. Не может ли это быть причиной?


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Heinzz
Дата 17.2.2010, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Цитата(nmn @  17.2.2010,  13:47 Найти цитируемый пост)

почему нет bbbbb? 


string pattern = @"[a|b]*"; - работает

Это сообщение отредактировал(а) Heinzz - 17.2.2010, 17:36


--------------------
user posted image
PM MAIL   Вверх
nmn
Дата 17.2.2010, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: 1
Всего: 1



можно в двух словах что такое группы smile
цель не составить работающее выражение, а разобраться почему это себя ведет не так как ожидается

Это сообщение отредактировал(а) nmn - 17.2.2010, 18:32
PM Skype   Вверх
diadiavova
Дата 17.2.2010, 20:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



nmn, я думаю, что проблема в том, что паттерн составлен таким образом, что ему может соответствовать даже пустая строка. Посмотри что выводит вот этот код сам всё увидишь
Код

        static void Main(string[] args)
        {
            var val = "aaaa bbbb";
            var re = new Regex("(a*|b*)");
            var ms = re.Matches(val);
            Console.WriteLine("Mathches count: " + ms.Count);
            foreach (Match m in ms)
            {
                
                Console.WriteLine("start: {0}; length: {1}; value: {2}",m.Index,m.Length,m.Value);
            }
            Console.ReadKey();
        }
 Тебе надо просто заменить в паттерне звёздочку плюсиком a+|b+. И скобки там не нужны, они ничего не дают.

Это сообщение отредактировал(а) diadiavova - 17.2.2010, 20:01


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.