Как заменить текст между тегами?
Есть mhtml страница https://pastebin.com/raw/643TX3Td. Хочу заменить текст между тегами, чтобы он принял вид как обычный html. Думал сперва загрузить все в список, и потом каждое совпадение изменить, но проблема в том что теги в разных строках.
var html = File.ReadAllText("1.mhtml");
StringBuilder sb = new StringBuilder();
var items = Regex.Matches(html, "(?<=>).+?(?=</)").Cast<Match>().Select(x => x.Value).ToList();
foreach (var item in items)
{
var t = item;
var newitem = DecodeQuotedPrintables(item, Encoding.UTF8);
sb.Append(html.Replace(t, newitem));
}
Т.е. задача тупо заменить текст между тегами на декодированный

Ответы (2 шт):
Чтобы . захватывала переводы строк, надо указать флаг s.
Например, так:
(?s)
Подробнее в этом вопросе Любое количество любых символов в notepad++.
Предлагаю использовать какой-нибудь html-парсер. Например, HtmlAgilityPack.
Вот код с его использованием.
var text = File.ReadAllText("test.txt");
int start = text.IndexOf("<html>");
int end = text.IndexOf("</html>");
var html = text.Substring(start, end - start + "</html>".Length);
var doc = new HtmlDocument();
doc.LoadHtml(html);
foreach (var node in doc.DocumentNode.Descendants())
{
if (node.NodeType == HtmlNodeType.Text)
{
var trimmed = node.InnerText.Trim();
if (trimmed.Length > 0)
{
var decoded = DecodeQuotedPrintables(trimmed, Encoding.UTF8);
node.InnerHtml = decoded;
}
}
}
Console.WriteLine(doc.DocumentNode.OuterHtml);
Функция DecodeQuotedPrintables - из вашего предыдущего вопроса.
Сперва отрезал всё до тега <html> и после после </html>. Возможно, это можно и не делать. После декодирования следует присоединить отрезанные части обратно.
Как сделать обработку регуляркой:
var text = File.ReadAllText("test.txt");
var pattern = "(?<=>).+?(?=</)";
var options = RegexOptions.Singleline;
var result = Regex.Replace(text, pattern, m => DecodeQuotedPrintables(m.Value, Encoding.UTF8), options);