Я думаю, ваша проблема в том, что шаблон регулярного выражения по-разному воспринимается вашим регулярным выражением и .NET Framework. При использовании шаблона в коде вы должны иметь в виду, что ваша строка будет проверяться на escape-символы.
В то время как ваш регулярное выражение-тестер получает (.)\\1{2,}
, .NET Framework Regex
получает (.)\1{2,}
, потому что "\\"
становится \
. Вы можете исправить это, изменив свой шаблон следующим образом: string pattern = "(.)\\\\1{2,}";
или отключите escape-символы, используя string pattern = @"(.)\\1{2,}";
.
Вы можете видеть разницу, рассматривая другой шаблон, такой как \w
.
Regex.Match("\w", myTestString);
Это вызовет ошибку компиляции, поскольку "\w"
содержит неизвестную последовательность эвакуации (строка вычисляется во время разработки). Чтобы исправить ошибку, я добавляю @
перед строкой, и компилятор удовлетворен.
Regex.Match(@"\w", myTestString);
В вашем случае, вы не получите сообщение об ошибке, потому что "\\"
еще допустимая строка. Но, как вы испытали,
Regex.Match("\\", myTestString);
Regex.Match(@"\\",myTestString);
может привести к разным результатам.
Каковы ваши критерии для соответствия строкам? Прямо сейчас вы захватываете символ, который повторяется 2 или более раз, таким образом «555» захватывается. Первый скриншот показывает проблему с вашим тестом: вы используете двойную обратную косую черту, в то время как вы должны использовать 1. –
На самом деле это не мой проект, я пытаюсь его улучшить, и REFER TO MTF # Y2015-19555 is невозможно совместить с этим регулярным выражением, , но в редакторе .net framework 2.0 regex пусть это пройдет это регулярное выражение –