Ваш текущий шаблон является жадным и соответствует больше, чем предполагалось, судя по полученной замене. «Жадный» означает, что использование .*
поглощает больше, чем вы предполагали, поэтому, чтобы сделать его не жадным, вам нужно добавить ?
после него, чтобы оно соответствовало как можно меньшему количеству символов: .*?
.
Шаблон, подобный \".*\"
, является жадным, потому что вы намереваетесь остановиться на первой найденной кавычке, но он фактически продолжает сопоставлять содержимое, пока не достигнет последней кавычки в строке, если она существует. Нежадным решением является использование \".+?\"
или \"[^\"]+\"
.
Попробуйте этот шаблон вместо:
string pattern = @"\[.+?Url=(?<url>"".+?"").+?ContentDatabase=(?<databasename>"".+?"").+?]";
string replacement = "stsadm.exe -o deletecontentdb -url ${url} -databasename ${databasename} -databaseserver myfixedservername";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine(result);