Regex для изменения определенных URL в больших строках - PullRequest
0 голосов
/ 26 августа 2009

У меня проблемы с получением моего регулярного выражения на работу (большой сюрприз)

Я пытаюсь заменить URL в большом тексте:

<img src="http://www.example.com/any/number/of/directories/picture.jpg" ...

<img src="http://www.example.com/any/number/of/directories/picture.gif" ...

С:

<img src="/LocalDirectory/images/picture.jpg" ...

Я хочу сохранить название изображений, и у меня не может быть ложных предположений, так как исходный текст будет содержать другие URL-адреса, которые я хочу оставить в покое. Я хочу изменить только изображения, чтобы они могли совпадать либо с jpg | jpeg | gif | png и т. Д., Либо с

Я делаю это в C #.

Ответы [ 4 ]

3 голосов
/ 26 августа 2009

Поскольку у меня уже есть этот удобный инструмент, он должен получить сам URL:

(?<=src=")[^"]+(?=")

Проверено в Regex Hero , это регулярное выражение использует положительный взгляд назад и положительный взгляд вперед, чтобы получить URL внутри src = "".

Я посмотрю, смогу ли я придумать что-то более конкретное для вашей задачи ...

ОК, это должно работать:

(?<=src=")[^"]+(/[^/]+(\.jpg|\.gif))(?=")

И тогда вы можете использовать заменяющее значение:

/LocalDirectory/images$1

Или вот полный код C #:

string strRegex = "(?<=src=\")[^\"]+(/[^/]+(\.jpg|\.gif))(?=\")";
RegexOptions myRegexOptions = RegexOptions.None;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = "<img src=\"http://www.example.com/any/number/of/directories/picture.jpg\" />" & vbCrLf & "<img src=\"http://www.example.com/any/number/of/directories/picture.gif\" />";
string strReplace = "/LocalDirectory/images$1";

return myRegex.Replace(strTargetString, strReplace);
1 голос
/ 26 августа 2009

Надеюсь, это поможет:

var replace = "/localserver/some/directory/";
var strs = new List<string>
{
    "<img src=\"http://www.example.com/any/number/of/directories/picture.jpg\"",
    "<img src=\"http://www.example.com/any/number/of/directories/picture.gif\"" 
};

Regex r = new Regex("[^<img src=\"].*/");

foreach (var s in strs)
{
    Console.WriteLine("Replaced: {0}",r.Replace(s,replace));
}

выходы:

Replaced: <img src="/localserver/some/directory/picture.jpg"
Replaced: <img src="/localserver/some/directory/picture.gif"
1 голос
/ 26 августа 2009
strTargetString = "img tags to check";
string strRegex = "src=\"(.*)/(.*)\.(jpg|png|gif)\"";
RegexOptions myRegexOptions = RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace;
Regex myRegex = new Regex(strRegex, myRegexOptions);

string strReplace = "src="\/LocalDirectory\/images\/$2\.$3"";

return myRegex.Replace(strTargetString, strReplace);

Не правильно прочитал вопрос. Теперь это заменит первую часть пути для jpg, png и gif и сохранит имя файла. все остальное игнорируется

1 голос
/ 26 августа 2009

URL-сопоставление с регулярными выражениями чрезвычайно сложно, если не невозможно. Если у вас нет дополнительных ограничений на то, что содержат ваши URL в ваших документах, в этом случае вы можете пожертвовать гибкостью своего регулярного выражения в обмен на практичность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...