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


Автор: bigbuka 10.6.2011, 20:36
Есть файлик со списком регулярных выражений
каждое в отдельной строке
делаю System.IO.File.ReadAllLines()
вызываю конструктор RegEx  бросает exeception "Неправильный формат esc-последовательности \p{x}"
После берем любую строчку из этого же файла вставляем в конструктор и все никакого exeception нету в чем магия?
на всякий случай вот пример выражения
Код

(?<=\PL)?[пp]_?[иieеё]_?[зz3]_?[дd](?=_?[[аеиоуыэюяёaeioyu])

P.S. с кодировкой файла все ок

Автор: diadiavova 10.6.2011, 21:31
Цитата(bigbuka @  10.6.2011,  21:36 Найти цитируемый пост)
в чем магия?

Скорей всего в обратном слеше. Если ты в коде строку передаешь именно так, как показано в твоем примере, то есть
Код

string rePattern = "(?<=\PL)?[пp]_?[иieеё]_?[зz3]_?[дd](?=_?[[аеиоуыэюяёaeioyu])";

Тофактически у тебя создается строка без обратного слеша, поскольку он воспринимается как спецсимвол. В то же время, читая эту строку из файла ты передаешь ее как есть. А последовательность \P в регулярном выражении имеет собственное значение и за ней должно следовать выражение в фигурных скобках
http://msdn.microsoft.com/ru-ru/library/az24scfc.aspx#character_escapes
Если в коде шарпа текстовый литерал будет представлен так
Код

string rePattern = @"(?<=\PL)?[пp]_?[иieеё]_?[зz3]_?[дd](?=_?[[аеиоуыэюяёaeioyu])";

То по идее должна выскочить та же ошибка. Если ты ищешь эту последовательность символов(\P), то в самой регулярке обратный слеш надо удвоить.

Автор: bigbuka 10.6.2011, 21:38
одна голова хорошо а 2 лучше ) 
Спасибо огромное!))

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