0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
.NET 10

Удаление команд из текста

10.12.2025, 08:16. Показов 2573. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Хочу узнать как можно удалять из текста команды которые выглядят вот так:
Code
1
Текст \C[КОД КОМАНДЫ]Текст. Или \C<КОД КОМАНДЫ>Текст!
По сути нужно заменять на:
Code
1
Текст Текст. Или Текст!
Знаю что это лучше всего делать через регулярные выражения. Иначе прийдётся искать начало и конец символов команды и вычислить длину.
Но я не понимаю структуру команд регулярных выражений.
Мне нужен пример. Не думаю что нужно там под каждую команду своё регулярное выражение. Мне кажется должно быть возможным прописать вариант (по крайней мере для таких команд).
Суть команды в том что она начинается на \ дальше кодовый символ команды. Скобки (могут быть любыми). В скобках сама команда.
И ещё такая суть что есть команда \\ которая попросту заменяется на символ \. Так что это тоже нужно учесть.
Но это в целом легко учесть если сначала заменить \\ на \.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.12.2025, 08:16
Ответы с готовыми решениями:

Запись текста в Label и удаление текста из него по Backspace
Доброго времени суток, вопрос такой. Значит сделал я Лейбл, дальше я хочу в него записывать текст....

Вставка текста до выделенного текста и после текста
Ребят, помогите решить задачку. Есть RichBox и в нем некий текст. Я выделил часть текста и при...

Удаленное выполнение команд в терминале линукс
Добрый день. Подскажите как можно реализовать удаленное общение с консолью линукса. Нужно чтоб...

31
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 3
17.12.2025, 23:41
Студворк — интернет-сервис помощи студентам
Borisov_Alex, на вскидку если:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
string pattern1 = @"(?:\\\w+[[<][^]>]+[]>])";
string text = @"\N[1] должно быть в \HexColor<#FF0000>красной \C[0]рубашке! Он собрал \C[1]\V[1] \C[0]из \C[1]\V[2] \C[0]предметов!";
 
// Удаление команд из текста
string result = Regex.Replace(text, pattern1, "");
 
// Текст без команд
Console.WriteLine(result.Trim());   //должно быть в красной рубашке! Он собрал  из  предметов!
 
// Кол-во символов в тексте без команд
Console.WriteLine(result.Length);   //57
 
// Вывод всех параметров и их значений
string pattern2 = @"(?:\\(\w+)[[<]([^]>]+)[]>])";
MatchCollection mc = Regex.Matches(text, pattern2);
 
foreach (Match m in mc)
    Console.WriteLine($"Параметр: {m.Groups[1].Value}\tЗначение: {m.Groups[2].Value}");
 
/*
Параметр: N     Значение: 1
Параметр: HexColor      Значение: #FF0000
Параметр: C     Значение: 0
Параметр: C     Значение: 1
Параметр: V     Значение: 1
Параметр: C     Значение: 0
Параметр: C     Значение: 1
Параметр: V     Значение: 2
Параметр: C     Значение: 0
*/
 
Console.ReadLine();
Цитата Сообщение от Borisov_Alex Посмотреть сообщение
вот оригинальный код который делает замену:
Из него видно, что все значения параметров парсятся в int.
0
Эксперт .NET
 Аватар для Usaga
14730 / 9506 / 1362
Регистрация: 21.01.2016
Сообщений: 35,851
18.12.2025, 04:58
Borisov_Alex, это всё не то. Это ты мне своё видение решения какой-то проблемы описываешь. А я спрашиваю что за проблема такая исходно. Что за команды, почему они в любом тексте встречаются, и почему надо ограничивать длину текста?

Я это спрашиваю потому, что нормальное решение может оказаться совершенно не таким, как ты ожидаешь.
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
18.12.2025, 11:41  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Borisov_Alex, это всё не то. Это ты мне своё видение решения какой-то проблемы описываешь. А я спрашиваю что за проблема такая исходно. Что за команды, почему они в любом тексте встречаются, и почему надо ограничивать длину текста?
Я это спрашиваю потому, что нормальное решение может оказаться совершенно не таким, как ты ожидаешь.
Извиняюсь. Я видимо вас не так понял видимо. Я пишу текстовой редактор с функционалом который нужен. Ну например конверт регистров который довольно часто необходим. Обернуть текст в разные виды кавычек И самое главное функционал под один игровой движок. Так вот данный движок имеет скажем так называемые команды для текста. Команды описанные выше. Сам движок их меняет на определенный текст например имя актёра, значение переменной или покраску текста делает. Увы движок по умолчанию не умеет переносить текст сообщений на новую строку если он не влазит. Тот редактор текста что встроен движок довольно слабоват. Единственное что он может это показывает сколько символов влезает в строку. Так вот мне необходимо у себя сделать перенос текста если он выходит за пределы. Количество символов уже посчитаны. Но понятное дело если просто переносить без учета команд то команды будут считаться обычным текстом. Они не должны считаться текстом. По факту я думаю перенос должен быть таким как будто команд в тексте не существует. То есть учитывать только длинну текста без этих команд.
Изначально подумал что удалить команды и далее сделать перенос. Но не подумал а как потом вернуть обратно ибо после переноса позиция команд в тексте полностью собьется.
0
Эксперт .NET
 Аватар для Usaga
14730 / 9506 / 1362
Регистрация: 21.01.2016
Сообщений: 35,851
18.12.2025, 15:43
Borisov_Alex, теперь всё встало на свои места.

Регулярные выражения тут можно было бы использовать. Но ты про производительность и эффективность тоже упомянул (похвально). А это значит, что придётся писать лексический анализатор, который будет разбивать входящую строку на лексемы ("текст", "команда", "параметр команды") и отдавать их (через IEnumerable<T>) рендереру, который и будет вычислять длину текущей строки и выполнять разбиение. Будет максимально эффективно.

Только тут явно понадобится список допустимых команд. Изначально выглядело, что достаточно "\С" или "\N", но видно что команд сильно больше.
1
Нарушитель
7097 / 2328 / 353
Регистрация: 10.12.2013
Сообщений: 8,047
18.12.2025, 18:12
Цитата Сообщение от Usaga Посмотреть сообщение
придётся писать лексический анализатор,
Да какой там лексический анализатор.

Ему нужен нормальный(читай настоящий) текстовый редактор, чтобы было удобно редактировать очень большой текстовый файл, служащий ресурсом для какой-то игрульки.

Намекаю на nvim. Кака бычно.

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

Всё давно придумано (40 лет тому назад) и то, что мОлодежь ничего не знает и изобретает велосипед - це обычное невежество,
которое сложно оправдать, имея под руками интернет и всякий там ИИ.
0
Эксперт .NET
 Аватар для Usaga
14730 / 9506 / 1362
Регистрация: 21.01.2016
Сообщений: 35,851
18.12.2025, 18:15
volodin661, ТС обозначил, что ему нужно текст разбивать на строки ограниченной длины, но учитывающий некие лексемы, которые разбивать не можно.
0
Нарушитель
7097 / 2328 / 353
Регистрация: 10.12.2013
Сообщений: 8,047
18.12.2025, 18:54
Ну так и я об этом; текст большой, всё слитно, глаза разбегаются, если просто холодно ограничить ширину, чтобы поудобней,
то linebreak может попасть на 'некую лексему', которую разбивать не надо.

Со всеми задачами подобного рода отлично справляются настоящие текстовые редакторы.

Добавлено через 2 минуты
И уж совсем непонятно, зачем тут C#.NET
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
18.12.2025, 19:10  [ТС]
Вообще текст не будет сильно большой. В самом большом сценарии в одно сообщение влезает 4 строки по около 60 символов в каждом + команды.
Список команд естественно имеется. Всего около 50. Некоторые откровенно простые такие как
\! \^ \G и т.д.
Но некоторые с параметрами которые как правило указываются либо в таких: []; либо в таких: <> скобках.
Так что на счёт длинных сообщений это я конеш загнул. Хотя могут быть и длинными но это явно в пределах разумного. Скажем так ни целая книга. Никто в здравом уме не станет писать многомиллионный текст для одного сообщения.

В любом случае я понятия не имею как сделать перенос текста так чтобы это учитывало команды. Предположительно к числу допустимых символов в строке добавить длинну команд. Но хотя способ наверное нерабочий. Понятно что точный вариант тут никак не посчитаешь. Банально неизвестно на что команды будут меняться. Но хотябы преблезительно. Мне именно что нужно сделать перенос текста чтобы текст команд не учитывался. Обновить обычную функцию переноса текста которую выше писал.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 3
18.12.2025, 20:56
Borisov_Alex,
1. Ты в чем и на чем это все делаешь? Это твое самописное приложение на C# будет, этот "редактор"?
2. Перенос строк, в частности по словам - умеют делать многие контролы сами из коробки.
3. Перенос строк для визуализации (просмотра в редакторе) вовсе не означает, что нужно реально менять исходный текст, вставляя перенос строк в него.

Цитата Сообщение от volodin661 Посмотреть сообщение
отлично справляются настоящие текстовые редакторы.
Т.к. вопрос опубликован в ветке .NET, то предполагается, что вопрошающий хочет осуществить данную затею самостоятельно.
Разве что со способностью ясно излагать суть вопроса у ТС проблема.
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
20.12.2025, 11:29  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
1. Ты в чем и на чем это все делаешь? Это твое самописное приложение на C# будет, этот "редактор"?
C# Winforms NET 10. Но TextBox в данном случае служит лишь как объект ввода и отображения текста. К томуже как уже сказал у меня есть метод переноса текста. Проблема именно не учитывать текст команд при переносе. Я банально не знаю как это сделать.
Цитата Сообщение от wizard41 Посмотреть сообщение
2. Перенос строк, в частности по словам - умеют делать многие контролы сами из коробки.
Не учитывать текст команд! Собственных команд. Они не мои но они уникальны!
Цитата Сообщение от wizard41 Посмотреть сообщение
3. Перенос строк для визуализации (просмотра в редакторе) вовсе не означает, что нужно реально менять исходный текст, вставляя перенос строк в него.
Да не для визуальности кокрастаки. Я кому блин говорил что движок в строке позволяет иметь ограниченное количество символов. В зависимости от размера шрифта но по стандарту это 53.
Вот мне и нужна одна из функций редактора отредактировать текст под стандарт движка который сделает перенос текста при достижении длинны.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 3
20.12.2025, 17:41
Borisov_Alex, хм.. Окей.
А что если:
а) лимит символов упирается прямо в середину/часть команды? Переносится все, что идет сразу после команды?
б) лимит уперся в середину/часть слова (не команды). Это слово обрезается и остаток его переносится на новую строку?
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
25.12.2025, 15:02
Цитата Сообщение от Borisov_Alex Посмотреть сообщение
Функция переноса текста без учета команд.
Перенос по пробелам или в любом месте (в середине слова можно)?

Добавлено через 3 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
ТС обозначил, что ему нужно текст разбивать на строки ограниченной длины
Причём, возможно, длина определяется не количеством отображаемых символов, а шириной текста как элемента графики.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2025, 15:02

Интерпретатор команд, записанных в текстовом файле
Есть текстовой файл с однотипными командами : pause(1) scene bg black with dissolve ...

Не могу написать проект... (интерпретатор команд для управления объектом)
Синопсис В данном проекте Вам необходимо реализовать простой интерпретатор команд для управления...

Клиент-сервер: использование команд для управления рабочим процессом
Доброго времени суток, появилась идея написать клиент-сервер на базе обычного чата , при получении...

Shutdown в C# выполнение команд, через вин-форму, как в ком.строке)
Доброго времени суток! Небольшая предыстория, для ясности: Я только начинаю знакомиться с...

Имитация команд "копировать", "вставить", "удалить"
Доброго времени суток! Собственно почти сабж. Пишу программу и решил сделать классическое меню...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Опции темы

Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru