Помогите удалить и заменить часть ссылки на картинку

kuzenstudio

Client
Регистрация
26.06.2010
Сообщения
139
Благодарностей
28
Баллы
28
Добрый всем, помогите пожалуйста решить мою проблему.
Спарил статью в переменную, в ней есть url картинок, как мне их исправить на то что мне нужно.
Есть:
<img loading="lazy" src="https://сайт.ru/может меняться/может меняться/может меняться/может меняться/может меняться.png или jpg" удалить хвост">
Нужно получить:
<img loading="lazy" src="images/02-shema-podklyucheniya-puskatelya-1.jpg или png " />
Заранее спасибо !
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113
Спарил статью в переменную, в ней есть url картинок, как мне их исправить на то что мне нужно.
Берете из списка, к примеру, нужный урл картинки для замены и по наращиваемому от 0 счетчику в переменной num производите замену в цикле. Если картинка в статье одна, то счетчик и цикл не нужен.

Регулярка:
(?<=<img\ loading="lazy"\ src=").*?(?=">)
64860
 
  • Спасибо
Реакции: kuzenstudio

kuzenstudio

Client
Регистрация
26.06.2010
Сообщения
139
Благодарностей
28
Баллы
28
Добрый, спасибо большое что помогаете. Но берется вся ссылка и хвост, а мне как я понял нужно только имя файла.
Снимок.PNG
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113
  • Спасибо
Реакции: kuzenstudio

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Замена всех на 1 ссылку:
string html_in = project.Variables["in"].Value; // Входящий HTML
string template = project.Variables["temp"].Value; // Пример что должно получиться
string html_out = project.Variables["out"].Value; // Сюда сохраняем
string img_url = project.Variables["url"].Value; // На что меняем

string pattern_src = @"(?<=src="").*?(?="")"; // Ищем ссылку
string pattern_img = @"<img[\w\W]*?>"; // Ищем картинку
string pattern_contains = @"loading=""lazy"""; // Ищем loading="lazy"

string[] all_img = Regex.Matches(html_in, pattern_img).Cast<Match>().Select(s => s.Value).ToArray(); // Берем все картинки
all_img = all_img.Where(x => !string.IsNullOrEmpty(x) && x.Contains(pattern_contains)).ToArray(); // Берем все картинки у которых есть loading="lazy"

if(all_img.Length > 0) {
    for(int i=0;i<all_img.Length;i++) { // Производим замену в каждом совпадении
        string temp_img = all_img[i]; // Взяли html картинки
        string new_img = Regex.Replace(temp_img, pattern_src, img_url, RegexOptions.IgnoreCase); // Произвели замену src
        html_in = html_in.Replace(temp_img, new_img);    // произвели замену в html
    }
}

project.Variables["out"].Value = html_in; // вернули в шаблон результат
Замена ссылки только в первой картинке:
string html_in = project.Variables["in"].Value; // Входящий HTML
string template = project.Variables["temp"].Value; // Пример что должно получиться
string html_out = project.Variables["out"].Value; // Сюда сохраняем
string img_url = project.Variables["url"].Value; // На что меняем

string pattern_src = @"(?<=src="").*?(?="")"; // Ищем ссылку
string pattern_img = @"<img[\w\W]*?>"; // Ищем картинку
string pattern_contains = @"loading=""lazy"""; // Ищем loading="lazy"

string[] all_img = Regex.Matches(html_in, pattern_img).Cast<Match>().Select(s => s.Value).ToArray(); // Берем все картинки
all_img = all_img.Where(x => !string.IsNullOrEmpty(x) && x.Contains(pattern_contains)).ToArray(); // Берем все картинки у которых есть loading="lazy"

if(all_img.Length > 0) {
    for(int i=0;i<all_img.Length;i++) { // Производим замену в каждом совпадении
        string temp_img = all_img[i]; // Взяли html картинки
        string new_img = Regex.Replace(temp_img, pattern_src, img_url, RegexOptions.IgnoreCase); // Произвели замену src
        html_in = html_in.Replace(temp_img, new_img);    // произвели замену в html
        break;
    }
}

project.Variables["out"].Value = html_in; // вернули в шаблон результат
Замена во всех (для которых предоставили url):
string html_in = project.Variables["in"].Value; // Входящий HTML
string template = project.Variables["temp"].Value; // Пример что должно получиться
string html_out = project.Variables["out"].Value; // Сюда сохраняем
string img_url = project.Variables["url"].Value; // На что меняем

List<string> img_urls = new List<string>(); // Если нужно произвести каждую отдельно
img_urls.Add(img_url);
img_urls.Add("url 2");
img_urls.Add("url 3");

string pattern_src = @"(?<=src="").*?(?="")"; // Ищем ссылку
string pattern_img = @"<img[\w\W]*?>"; // Ищем картинку
string pattern_contains = @"loading=""lazy"""; // Ищем loading="lazy"

string[] all_img = Regex.Matches(html_in, pattern_img).Cast<Match>().Select(s => s.Value).ToArray(); // Берем все картинки
all_img = all_img.Where(x => !string.IsNullOrEmpty(x) && x.Contains(pattern_contains)).ToArray(); // Берем все картинки у которых есть loading="lazy"

if(all_img.Length > 0) {
    for(int i=0;i<all_img.Length;i++) { // Производим замену в каждом совпадении
        string temp_img = all_img[i]; // Взяли html картинки      
        if(img_urls.Count > i) {
            string new_img = Regex.Replace(temp_img, pattern_src, img_urls[i], RegexOptions.IgnoreCase); // Произвели замену src
            html_in = html_in.Replace(temp_img, new_img);    // произвели замену в html
        }
        else {
            break;
        }      
    }
}

project.Variables["out"].Value = html_in; // вернули в шаблон результат
 

Вложения

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)