Как проставить теги в тексте

Veromilja

Client
Регистрация
17.10.2016
Сообщения
26
Благодарностей
5
Баллы
3
Как можно в тексте обернуть уже готовые строки тегами <p></p>, если они не имеют других тегов.

Было
140966
Стало
140967
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 713
Благодарностей
1 056
Баллы
113
любой нейронке скорми он тебе даст ответ в виде регулярки
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
172
Благодарностей
99
Баллы
28
Как можно в тексте обернуть уже готовые строки тегами <p></p>, если они не имеют других тегов.

Было
Посмотреть вложение 140966
Стало
Посмотреть вложение 140967
В PM:
project.Variables["Text"].Value = Macros.TextProcessing.Replace(project.Variables["Text"].Value, "^(?<=[^<])", "<p>", "Regex", "All");
project.Variables["Text"].Value = Macros.TextProcessing.Replace(project.Variables["Text"].Value, "(?<=[>$])", "</p>", "Regex", "All");
В notepad Найти: ^(?<=[^<]) Заменить на: <p> и Найти: (?<=[>$]) Заменить на: </p>
 

Veromilja

Client
Регистрация
17.10.2016
Сообщения
26
Благодарностей
5
Баллы
3
В PM:
project.Variables["Text"].Value = Macros.TextProcessing.Replace(project.Variables["Text"].Value, "^(?<=[^<])", "<p>", "Regex", "All");
project.Variables["Text"].Value = Macros.TextProcessing.Replace(project.Variables["Text"].Value, "(?<=[>$])", "</p>", "Regex", "All");
В notepad Найти: ^(?<=[^<]) Заменить на: <p> и Найти: (?<=[>$]) Заменить на: </p>
Что-то не работает, проставляется только тег </p> и то не там где нужно.
 

Veromilja

Client
Регистрация
17.10.2016
Сообщения
26
Благодарностей
5
Баллы
3
Есть простой метод с заменой Заменить: (.+) на <p>$1</p>. Но этот метод вставляет по всем строкам и где стоят другие, а мне только в пустых надо проставлять.
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 941
Благодарностей
1 631
Баллы
113
Положить в список. Пройтись все строки по очереди, если строка начинается с <, то перекладываем как есть, если не начинается с тега, то перекладываем, добавляя в начало и конец <p> и </p>.
Готово
ps. Да, решение не самое "эффектное", но точно сработает. Я за то и полюбил зенку, что можно нарушать привычные маршруты реализации и даже кубиками реализовывать то, что хочется, пусть и немного подумав над логикой )) Эдакий ТРИЗ ))
 

kagorec

Client
Регистрация
24.08.2013
Сообщения
1 131
Благодарностей
636
Баллы
113
Как можно в тексте обернуть уже готовые строки тегами <p></p>, если они не имеют других тегов.

Было
Посмотреть вложение 140966
Стало
Посмотреть вложение 140967
В данном случае в тексте есть переходы строк, как раз по ним можно составить параграфы
Пробуйте через C# сниппет:

C#:
// Получаем текст статьи из переменной проекта ZennoPoster
string intxt = project.Variables["article"].Value;

// Устанавливаем настройки длины для параграфов (символы)
int minLen = 250;
int maxLen = 2000;

// Разделяем текст на отдельные блоки, используя двойные переносы строк (стандартный маркер абзаца)
string[] blocks = intxt.Split(new string[] { "\r\n\r\n", "\n\n", "\r\r" }, System.StringSplitOptions.RemoveEmptyEntries);

// Создаем StringBuilder для эффективной сборки итоговой строки без лишнего расхода памяти
System.Text.StringBuilder result = new System.Text.StringBuilder();

// Проходим циклом по каждому найденному блоку текста
foreach (string block in blocks) {
    // Удаляем лишние пробелы и переносы по краям текста
    string content = block.Trim();
    
    // Если после очистки блок пустой — пропускаем его
    if (string.IsNullOrEmpty(content)) continue;

    // Если блок превышает максимальный лимит в 2000 символов, его нужно принудительно разбить
    if (content.Length > maxLen) {
        int index = 0;
        // Цикл нарезки длинного блока на части по maxLen символов
        while (index < content.Length) {
            // Вычисляем длину следующего куска (не более maxLen)
            int length = System.Math.Min(maxLen, content.Length - index);
            // Вырезаем кусок текста
            string part = content.Substring(index, length);
            // Оборачиваем кусок в HTML тег <p> и добавляем в результат
            result.Append("<p>").Append(part).Append("</p>\r\n");
            // Сдвигаем индекс (указатель) на длину вырезанного куска
            index += length;
        }
    } else {
        // Если блок в пределах допустимого лимита — просто оборачиваем его в <p>
        result.Append("<p>").Append(content).Append("</p>\r\n");
    }
}

// Записываем сформированный HTML-код обратно в переменную проекта
project.Variables["article"].Value = result.ToString();
 
  • Спасибо
Реакции: Veromilja

b1zar

Client
Регистрация
29.06.2019
Сообщения
172
Благодарностей
99
Баллы
28

Veromilja

Client
Регистрация
17.10.2016
Сообщения
26
Благодарностей
5
Баллы
3
В данном случае в тексте есть переходы строк, как раз по ним можно составить параграфы
Пробуйте через C# сниппет:

C#:
// Получаем текст статьи из переменной проекта ZennoPoster
string intxt = project.Variables["article"].Value;

// Устанавливаем настройки длины для параграфов (символы)
int minLen = 250;
int maxLen = 2000;

// Разделяем текст на отдельные блоки, используя двойные переносы строк (стандартный маркер абзаца)
string[] blocks = intxt.Split(new string[] { "\r\n\r\n", "\n\n", "\r\r" }, System.StringSplitOptions.RemoveEmptyEntries);

// Создаем StringBuilder для эффективной сборки итоговой строки без лишнего расхода памяти
System.Text.StringBuilder result = new System.Text.StringBuilder();

// Проходим циклом по каждому найденному блоку текста
foreach (string block in blocks) {
    // Удаляем лишние пробелы и переносы по краям текста
    string content = block.Trim();
   
    // Если после очистки блок пустой — пропускаем его
    if (string.IsNullOrEmpty(content)) continue;

    // Если блок превышает максимальный лимит в 2000 символов, его нужно принудительно разбить
    if (content.Length > maxLen) {
        int index = 0;
        // Цикл нарезки длинного блока на части по maxLen символов
        while (index < content.Length) {
            // Вычисляем длину следующего куска (не более maxLen)
            int length = System.Math.Min(maxLen, content.Length - index);
            // Вырезаем кусок текста
            string part = content.Substring(index, length);
            // Оборачиваем кусок в HTML тег <p> и добавляем в результат
            result.Append("<p>").Append(part).Append("</p>\r\n");
            // Сдвигаем индекс (указатель) на длину вырезанного куска
            index += length;
        }
    } else {
        // Если блок в пределах допустимого лимита — просто оборачиваем его в <p>
        result.Append("<p>").Append(content).Append("</p>\r\n");
    }
}

// Записываем сформированный HTML-код обратно в переменную проекта
project.Variables["article"].Value = result.ToString();
Этот не подходит. Он расставляет р, но я так понял на каких то строго определенных размеров. В ИИ я уже кучю перепробовал, они там то не работают, то не правильно проставляют.
 

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