Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
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
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2016, 14:11
Ответы с готовыми решениями:

Замена в тексте регулярным выражением
Добрый день Помогите разобрать задачу. Есть текст (html) Необходимо пробежаться по тегам img и заменить их на любой другой...

Не компилится пример с регулярным выражением?
Пытаюсь подключить System.Text.RegularExpressions, а у меня не находит такого в библиотеках,System.Text есть, а...

Парсинг Прокси с регулярным выражением
using System; using System.Net; using System.Text.RegularExpressions; using System.Text; namespace HtmlSorceCode { class...

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.04.2016, 17:54
Помогаю со студенческими работами здесь

Поиск слова регулярным выражением
Добрый день. Есть строка: ---- Hi nickname, Sorry to hear you\ ---- Нужно вытащить регуляркой nickname, причем на практике он может...

Спарсить ссылку регулярным выражением
Доброй ночи. Есть текст, в котором есть ссылка: --- We got a request to reset your password. Reset...

Символы совпадают с регулярным выражением, но не выводятся
нужно вывести совпадение окружены символами "+ - *" и заканчиваются на последнюю букву, первого совпадения. например в строке...

Подсчет строк совпадающих с регулярным выражением
нашел в тексте строки которые подходят регулярному выражению, как подсчитать их кол-во? using (StreamReader rd = new...

Подскажите по парсеру html и регулярным выражением
Ребята, нужна помощь. Впервые пишу парсер и тем более на C#. До этого изучал с++ в институте, а сейчас возникла такая необходимость все это...


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

Или воспользуйтесь поиском по форуму:
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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru