Замена текста между тэгами html

  • Михаил
  • 12 мин. на прочтение
  • 70
  • 20 Dec 2022
  • 12 Jan 2023

Имеем html текст загружаемый из базы данных для отображения клиентам. Необходимо заменить текст между тегами для незарегистрированных пользователей , чтобы им отображалась либо картинка либо текст с предложением регистрации, для просмотра кода.

Элементарный пример

string start = @"]";
string end = @"

"; string pattern = $@"(?s){start}.*?{end}"; string textToReplace = "

....

Здесь код

......

......

...

Здесь еще код"; string replaceWith = "Это новый текст, который будет на месте кода"; string output = Regex.Replace(textToReplace, pattern, replaceWith);

 

var text = File.ReadAllText("test.txt");
var pattern = "(?<=>).+?(?= DecodeQuotedPrintables(m.Value, Encoding.UTF8), options);

Еще пример

var s = "My temp folder is: [code]Path.GetTempPath()[/code]";
var result = Regex.Replace(s, @"\[code](.*?)\[/code]",
   m =>
       {
           var codeString = m.Groups[1].Value;
           // then you have to evaluate this string
           return EvaluateMyCode(codeString)
       });

 

Можно использовать какой-нибудь html-парсер. Например, HtmlAgilityPack.

Вот код с его использованием.

var text = File.ReadAllText("test.txt");

int start = text.IndexOf("");
int end = text.IndexOf("");
var html = text.Substring(start, end - start + "".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);