Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/50: Рейтинг темы: голосов - 50, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 01.03.2011
Сообщений: 9

Парсинг строк, разбиение строки на лексемы, регулярные выражения, разделители

13.09.2011, 11:10. Показов 10301. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
недавно столкнулся с небольшой проблемой, необходимо выполнить казалось бы элементарную задачу - разделить строку, символы разделители заданы регулярным выражением, на выходе необходимо соответственно получить массив подстрок данной строки, но... есть небольшое "но" массив подстрок должен содержать и подстроки разделители.

например:
исходная строка - "int a, b; char c; a:=b+a; c := 'x'; "
регулярное выражение разделителей - @",|.|;|:=| |+|-"
необходимая выходная последовательность:
"int", "a", ",", "b", ";", "char", "c", ";", "a", ":=", "b", "+", "a", ";", "c", ":=", "'x'", ";"

т.е. разделители не удаляются и притом необязательно состоят из одного символа, как например разделитель ":="

можно ли реализовать данную функциональность с использованием регулярных выражений?
очень уж не хочется писать посимвольный парсинг строки....

заранее огромное спасибо всем откликнувшимся.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.09.2011, 11:10
Ответы с готовыми решениями:

Регулярные выражения: разбиение строки на подстроки
Всем привет, как использовать регулярные выражения для разбиения строки на подстроки? К примеру есть строка "v:=a+b*c;", нужно...

Разбиение строки на лексемы
Вроде бы обычное, простое дело: разбить строку на лексемы, определённые "подсветить" и записать в выходной файл. Но возникли...

Есть ли в классе строк или в алгоритмах разбиение строку на лексемы?
Собственно сабж, как говорится. Хотел переписать программу, которую делал с Си строками и массивом Си строк. Сделана она была не совсем...

4
 Аватар для _ZnOFF_
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
13.09.2011, 14:16
Судя по примеру, пробел вам получается всё же не нужен, хотя он является разделителем?
По-моему проще будет сначала получить массив подстрок, затем массив нужных вам разделителей и объединить два массива.

Правда при этом потеряется последовательность выбранных элементов...
0
1 / 1 / 0
Регистрация: 01.03.2011
Сообщений: 9
13.09.2011, 20:15  [ТС]
да по поводу пробела к сожалению маленькая неточность, пробел и символ новой строки необходимо не учитывать, но это не так важно для конкретного примера, исключить их можно и после.

по поводу размышлизма - бесполезно, порядок естественно важен, для этого собственно и был приведен пример. да даже если бы не был важен, вопрос не в том как реализовать, а в том как реализовать красиво и наиболее модифицируемо, быстро, ибо посимвольная обработка это не есть хорошо
0
 Аватар для Unril
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
13.09.2011, 20:30
C#
1
2
3
4
5
6
7
8
9
            string inpupString = "int a, b; char c; a:=b+a; c := 'x'; ";
 
            Regex regex = new Regex( @"\+|\-|[a-z]+|\;|\:\=|\,|\'" );
 
            var matches = regex.Matches( inpupString );
 
            foreach ( Match match in matches ) {
                Console.WriteLine( match.Value );
            }
1
1 / 1 / 0
Регистрация: 01.03.2011
Сообщений: 9
13.09.2011, 23:24  [ТС]
спасибо огромное! тему можно закрывать, затупил немного, отдельно символы разделители искать додумался с помощью регулярных выражений, а вот так нет) спасибо еще раз)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2011, 23:24
Помогаю со студенческими работами здесь

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Чтение строки с файла, разбиение на лексемы и вывод по алфавиту
Долго мучился, и набросал вот такой код: #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> ...

Регулярные выражения (Парсинг)
Как отпарсить строку "{\"response\": Как выделить эту цифру? 142396579 Мне нужен лишь шаблон. Вот я такой пишу string pattern =...

Регулярные выражения, парсинг
Ребята, помогите пожалуйста состряпать пару регулярок для парсинга текста. Надо из этого : { "24h_avg": 763.11, ...

Парсинг: регулярные выражения
Здравствуйте! Пытаюсь распарсить текст на слова и знаки пунктуации. Текст распарсил, и осталось только отделить слова, от занков...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru