Ваш [\s*\n*\s*]
(равен [\s*]
) соответствует только одному символу, либо пробелу, либо *
. В вашем файле вы должны иметь окончания строк CRLF ("\r\n"
), и комбинация из двух символов не может быть сопоставлена с этим шаблоном.
Обратите внимание, что большинство онлайн-компиляторов регулярных выражений имеют только LF как последовательность окончания строки, поэтому вы получили соответствие с вашим шаблоном. Вы можете использовать RegexStorm для проверки. NET шаблонов с текстом, содержащим окончания CRLF (с моей стороны не связан с веб-сайтом).
Вы должны использовать
var Pattern = new Regex(@"Project\(""({.*?})""\)\s*=\s*""(myproject)""\s*,\s*""(.*?)""\s*,\s*""(.*?)""\s*EndProject");
var inputLines = File.ReadAllText(path);
var matches = Pattern.Matches(inputLines);
Обратите внимание на часть \s*EndProject
, где \s*
соответствует любым 0 или более пробельным символам. Если наверняка есть разрыв строки, вы также можете использовать \s+
для соответствия любому 1 или более пробелам.
Я также изменил все жадные .*
шаблоны с их ленивыми (не жадными) аналогами для лучшая производительность.