Как можно в тексте обернуть уже готовые строки тегами <p></p>, если они не имеют других тегов.
Было
Посмотреть вложение 140966
Стало
Посмотреть вложение 140967
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");
Что-то не работает, проставляется только тег </p> и то не там где нужно.В notepad Найти: ^(?<=[^<]) Заменить на: <p> и Найти: (?<=[>$]) Заменить на: </p>В 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");
В данном случае в тексте есть переходы строк, как раз по ним можно составить параграфыКак можно в тексте обернуть уже готовые строки тегами <p></p>, если они не имеют других тегов.
Было
Посмотреть вложение 140966
Стало
Посмотреть вложение 140967
// Получаем текст статьи из переменной проекта 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();
перепутал надо Найти: ^(?=[^<]) Заменить на: <p> и Найти: (?<=[^>])$ Заменить на: </p>Что-то не работает, проставляется только тег </p> и то не там где нужно.
Этот не подходит. Он расставляет р, но я так понял на каких то строго определенных размеров. В ИИ я уже кучю перепробовал, они там то не работают, то не правильно проставляют.В данном случае в тексте есть переходы строк, как раз по ним можно составить параграфы
Пробуйте через 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();



