Предположим, у меня была строка, как показано ниже:Regex Заменить с обратные
string signature = "<img src='/Files/A.jpg' />" +
"<img src='http://www.example.net/Files/A.jpg' />" +
"<img src='/Files/A.jpg' />";
Я хочу, чтобы заменить ниже строку перед «Files», если ниже фраза не выходит:
var url = "http://www.example.net";
Таким образом, окончательный результат было бы примерно так:
string signature = "<img src='http://www.example.net/Files/A.jpg' />" +
"<img src='http://www.example.net/Files/A.jpg' />" +
"<img src='http://www.example.net/Files/A.jpg' />";
Обратите внимание, что вторая строка не заменит, потому что у нее есть url. Таким образом, код, который я написал это:
string signature = "<img src='/Files/A.jpg' />" +
"<img src='http://www.example.net/Files/A.jpg' />" +
"<img src='/Files/A.jpg' />";
var url = "http://www.example.net";
string pattern = "Files";
Match m = Regex.Match(signature,pattern,RegexOptions.Multiline);
while (m.Success)
{
int backward = m.Index-url.Length + 6;
if (backward < 0) backward = 0;
string fromLastSrc = signature.Substring(backward, m.Index);
if (!fromLastSrc.Contains(url))
{
signature = signature.Insert(m.Index - 1, url);
}
m = m.NextMatch();
}
Он найдет индекс «Files» и двигаться в обратном направлении, чтобы проверить, является ли URL-адрес выходов, или нет. если URL не завершает работу, он заменит URL до «/ Files», но он порывает с execption ниже:
Index and length must refer to a location within the string
Код ниже не будет работать, что это лучший способ сделать это?