Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
.NET 10

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

10.12.2025, 08:16. Показов 2352. Ответов 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
3453 / 2774 / 575
Регистрация: 04.09.2018
Сообщений: 8,720
Записей в блоге: 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
14350 / 9453 / 1360
Регистрация: 21.01.2016
Сообщений: 35,636
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
14350 / 9453 / 1360
Регистрация: 21.01.2016
Сообщений: 35,636
18.12.2025, 15:43
Borisov_Alex, теперь всё встало на свои места.

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

Только тут явно понадобится список допустимых команд. Изначально выглядело, что достаточно "\С" или "\N", но видно что команд сильно больше.
1
 Аватар для volodin661
6813 / 2313 / 351
Регистрация: 10.12.2013
Сообщений: 7,981
18.12.2025, 18:12
Цитата Сообщение от Usaga Посмотреть сообщение
придётся писать лексический анализатор,
Да какой там лексический анализатор.

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

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

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

Всё давно придумано (40 лет тому назад) и то, что мОлодежь ничего не знает и изобретает велосипед - це обычное невежество,
которое сложно оправдать, имея под руками интернет и всякий там ИИ.
0
Эксперт .NET
 Аватар для Usaga
14350 / 9453 / 1360
Регистрация: 21.01.2016
Сообщений: 35,636
18.12.2025, 18:15
volodin661, ТС обозначил, что ему нужно текст разбивать на строки ограниченной длины, но учитывающий некие лексемы, которые разбивать не можно.
0
 Аватар для volodin661
6813 / 2313 / 351
Регистрация: 10.12.2013
Сообщений: 7,981
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
3453 / 2774 / 575
Регистрация: 04.09.2018
Сообщений: 8,720
Записей в блоге: 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
3453 / 2774 / 575
Регистрация: 04.09.2018
Сообщений: 8,720
Записей в блоге: 3
20.12.2025, 17:41
Borisov_Alex, хм.. Окей.
А что если:
а) лимит символов упирается прямо в середину/часть команды? Переносится все, что идет сразу после команды?
б) лимит уперся в середину/часть слова (не команды). Это слово обрезается и остаток его переносится на новую строку?
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
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
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru