Последние записи
- Посимвольное чтение из файла. Посимвольная запись в файл
- Разделить строку с сохранением разделителя
- Свой прогресс в консоли при выполнении команды ffmpeg
- HttpWebRequest выдаёт много ошибок при неудачном соединении
- Как обратиться к последней ячейке не связанного диапазона
- Управление громкостю MediaPlayer
- Как использовать java для бэкенда веб-сайтов и веб-скриптов?
- Некорректная работа гиперссылок Microsoft Word 2010
- Функция рисования для печати на принтере ScanLine
- Функция CharInSet (множества) не работает для русских букв
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
30th
Июл
Разделить строку с сохранением разделителя
Posted by obzor under C#
Исходную строку нужно разделить по паттерну — «O» и 5 цифр (например O00501), делаю так:
Regex ptrn = new Regex("O[0-9]{5}");
string[] lst = ptrn.Split(CurrentProgs.fileContent);
foreach (var sub in lst)
{
listBox1.Items.Add(sub);
}
все бы хорошо, но разделитель удаляется, а его нужно сохранить.
На всякий случай: искомое выражение всегда стоит после символа конца строки.
Рекомендуемое решение
string input = "начало строкиO12345серединаO67890конец";
// Ищем паттерн и все символы после него до начала следующего паттерна
// (?=O[0-9]{5}|$) означает "ищи до следующего паттерна или конца строки"
Regex ptrn = new Regex(@"O[0-9]{5}.*?(?=O[0-9]{5}|$)", RegexOptions.Singleline);
foreach (Match match in ptrn.Matches(input))
{
// Добавляем найденный блок + точку с запятой
listBox1.Items.Add(match.Value.Trim() + ";");
}
Если вы хотите принудительно разрывать строку именно перед Oxxxxx, можно использовать Lookahead (просмотр вперед):
// Разбиваем строку, оставляя паттерн в начале следующего элемента
string[] parts = Regex.Split(input, @"(?=O[0-9]{5})");
(?=…) — это положительный просмотр вперед. Он «видит» позицию перед нужной подстрокой, но не «съедает» её.
Небольшая рекомендация по производительности
Если вы планируете использовать этот код в цикле (например, при чтении множества файлов или обработке больших строк),
вынесите создание объекта Regex за пределы метода или сделайте его static.
Создание экземпляра Regex — относительно дорогая операция, поэтому в идеале:
private static readonly Regex _progsRegex = new Regex(@"O[0-9]{5}.*?(?=O[0-9]{5}|$)", RegexOptions.Compiled | RegexOptions.Singleline);
// Внутри метода:
foreach (Match match in _progsRegex.Matches(input))
{
listBox1.Items.Add(match.Value.Trim() + ";");
}
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту

пеллетные котлы

Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)


