|
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
|
|
Подбор алгоритма обработки строки регулярным выражением06.04.2016, 14:11. Показов 1608. Ответов 8
Метки нет (Все метки)
У меня осталось последнее задание из раздела работы со строками. Это очистка некой программы от всех комментариев... Если в учебниках пишут, что проверка реджексами адреса почты на правильность - задача нетривиальная, то здесь я вообще растерялся - любое решение кажется (и на самом деле такое) мне неполным... Не хочу приводить код из моей предыдущей попытки решить хотя бы частично эту задачу, чтобы не повлиять на ход возможного обсуждения. Из наставлений для решения задачи:
Кликните здесь для просмотра всего текста
– из примера видно, что нужно выделить три типа текста в исходном тексте:
1 строки – они беспрепятственно переносятся в результат, независимо, есть ли в них текст, совпадающий по синтаксису с комментариями, нужно только учесть, что в строках могут быть символы ". 2 комментарии // и до конца строки – они заменяются от // и до конца строки на перевод строки \r\n. 3 комментарии /* … */// – они удаляются. Отрывок входного файла теста: Кликните здесь для просмотра всего текста
/*
* To change this template, choose Tools | Templates * and open the template in the editor. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { /// class Program here class Program { static void Main(string[] args) { /// TODO code application logic here /* " */ string z = /*"hello"*/"test"; string ss="sdfsdf"\\*sd/////fsdf*\\"";///gft int i /*jjjjj*/ = 0; Console.WriteLine("/*dfsdf*////****/**//**Hello, world!\");/**/ // Моё видение: пожалуй, нужно несколько реджексов для поэтапной обработки строки. Непонятный момент: что значит - "строки беспрепятственно переносятся в результат"? А если строка "строка" есть в комментарии? Код писать не нужно (разве что для себя) - просто помогите осмыслить задачу.
0
|
|
| 06.04.2016, 14:11 | |
|
Ответы с готовыми решениями:
8
Замена в тексте регулярным выражением Не компилится пример с регулярным выражением? Парсинг Прокси с регулярным выражением |
|
4 / 4 / 3
Регистрация: 06.07.2012
Сообщений: 138
|
|
| 06.04.2016, 15:28 | |
|
baliar, обрабатывать весь файл как единое целое (а не построчно) регулярными выражениями (нежадными!!):
1) осуществить замену /* {любой текст} */ на символы возврата строки 2) осуществить замену // {любой текст} {конец строки} на символы возврата строки
1
|
|
|
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
|
|
| 06.04.2016, 17:22 [ТС] | |
|
Важный момент - занести в обработку сразу весь файл. Замена /// на \r\n как бы намекает на это.
0
|
|
|
4 / 4 / 3
Регистрация: 06.07.2012
Сообщений: 138
|
|
| 06.04.2016, 17:28 | |
|
baliar, так все, вопрос решен?
0
|
|
|
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
|
|
| 07.04.2016, 01:06 [ТС] | |
|
Нет. Основная сложность оставить нетронутыми строки, которые могут содержать комментарии.
0
|
|
|
4 / 4 / 3
Регистрация: 06.07.2012
Сообщений: 138
|
|
| 07.04.2016, 08:42 | |
|
baliar, не вижу проблемы. Загружаешь весь файл, обрабатываешь его регэкспами, делаешь замены как я описал и сохраняешь. Строки в которых не было комментариев останутся нетронутыми.
0
|
|
|
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
|
|
| 07.04.2016, 09:10 | |
|
Например так https://regex101.com/r/lW6qA0/1
1
|
|
|
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
|
|
| 07.04.2016, 12:12 [ТС] | |
|
?: - это значит не включение найденной строки в захват, а остальное выражение заменяется Replace?
Добавлено через 58 минут или это благодаря \G мы выбираем начало поиска...
0
|
|
|
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
|
||
| 07.04.2016, 17:54 | ||
Сообщение было отмечено baliar как решение
Решение
Шаблон захватывает всё до ближайшего комментария.
Смысл в том, чтобы в первую скобку захватить все что не является комментарием т.е. обычный текст и строки в кавычках. ( (?:не комментарий)* ) коментарий А в замене с помощью $1 подставляем текст, который был захвачен первой скобкой и таким образом очищаем текст от комментариев. Если в тексте не нашлось больше комментариев, то очередная попытка поиска завершится неудачей. Механизм регулярных выражений повторяет попытку поиска со следующей позиции в строке. Т.е. после каждой неудачи перемещается на один символ вперёд.
\G позволяет прекратить дальнейшие попытки поиска.
1
|
||
| 07.04.2016, 17:54 | |
|
Помогаю со студенческими работами здесь
9
Спарсить ссылку регулярным выражением
Подсчет строк совпадающих с регулярным выражением
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|