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


Автор: od0201 22.4.2014, 22:05
Код

      allMessage = File.ReadAllLines(fileName);
...
       Regex regex = new Regex(allMessage[mes_nom - 1]); 

Пытаюсь искать с тексте строку из массива строк, если в строке встречается не парная ")" или "(", ругается.
Понимаю, что б не ругалась нужно использовать "\", если ли другая альтернатива.

Интуиктивно чувствую что нужно применить @, но опыта маловато в C#


Спасибо

Автор: diadiavova 24.4.2014, 18:45
Цитата(od0201 @  22.4.2014,  23:05 Найти цитируемый пост)
Пытаюсь искать с тексте строку из массива строк, если в строке встречается не парная ")" или "(", ругается.

Скобки в регулярных выражениях являются специальными символами, так что, если ты ищешь скобку в тексте, то экранировать обратным слешем обязательно, независимо от того, парные они или нет, поскольку если ругаться не будет - это еще не значит, что найдет то, что надо.
Цитата(od0201 @  22.4.2014,  23:05 Найти цитируемый пост)
если ли другая альтернатива

Есть, но она тебе вряд ли понравится. Можно указать скобку, как символ юникода.
Цитата(od0201 @  22.4.2014,  23:05 Найти цитируемый пост)
Интуиктивно чувствую что нужно применить @, но опыта маловато в C#

Если ты пишешь регулярку прямо в коде, то это очень желательно сделать в любом случае, иначе просто запутаешься. Но если ты этого не делаешь(подчеркиваю, это плохая идея), то вместо одного слеша пиши два, например в случае со скобкой это будет выглядеть так: "\\(".

Если регулярка достаточно сложная, то лучше напиши ее в отдельном файле, добавь его в ресурсы и бери оттуда. Тут есть несколько преимуществ: не надо втискивать регулярку в ограничения строковых литералов, можно использовать многострочный текст и отступы  и таким образом отформатировть текст для более удобного чтнения (надо использовать флажок IgnorePatternWhiteSpace), ну и можно воспользоваться какой-нибудь внешней программой для редактировния и тестирования регулярок ( типа https://reggie.codeplex.com/). 

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