Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
1

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

06.04.2016, 14:11. Показов 1461. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня осталось последнее задание из раздела работы со строками. Это очистка некой программы от всех комментариев... Если в учебниках пишут, что проверка реджексами адреса почты на правильность - задача нетривиальная, то здесь я вообще растерялся - любое решение кажется (и на самом деле такое) мне неполным... Не хочу приводить код из моей предыдущей попытки решить хотя бы частично эту задачу, чтобы не повлиять на ход возможного обсуждения. Из наставлений для решения задачи:

Кликните здесь для просмотра всего текста
– из примера видно, что нужно выделить три типа текста в исходном тексте:
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2016, 14:11
Ответы с готовыми решениями:

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

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

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

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

8
4 / 4 / 3
Регистрация: 06.07.2012
Сообщений: 138
06.04.2016, 15:28 2
baliar, обрабатывать весь файл как единое целое (а не построчно) регулярными выражениями (нежадными!!):
1) осуществить замену /* {любой текст} */ на символы возврата строки
2) осуществить замену // {любой текст} {конец строки} на символы возврата строки
1
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
06.04.2016, 17:22  [ТС] 3
Важный момент - занести в обработку сразу весь файл. Замена /// на \r\n как бы намекает на это.
0
4 / 4 / 3
Регистрация: 06.07.2012
Сообщений: 138
06.04.2016, 17:28 4
baliar, так все, вопрос решен?
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
07.04.2016, 01:06  [ТС] 5
Нет. Основная сложность оставить нетронутыми строки, которые могут содержать комментарии.
0
4 / 4 / 3
Регистрация: 06.07.2012
Сообщений: 138
07.04.2016, 08:42 6
baliar, не вижу проблемы. Загружаешь весь файл, обрабатываешь его регэкспами, делаешь замены как я описал и сохраняешь. Строки в которых не было комментариев останутся нетронутыми.
0
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
07.04.2016, 09:10 7
Например так https://regex101.com/r/lW6qA0/1
1
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
07.04.2016, 12:12  [ТС] 8
?: - это значит не включение найденной строки в захват, а остальное выражение заменяется Replace?

Добавлено через 58 минут
или это благодаря \G мы выбираем начало поиска...
0
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
07.04.2016, 17:54 9
Лучший ответ Сообщение было отмечено baliar как решение

Решение

Шаблон захватывает всё до ближайшего комментария.
Смысл в том, чтобы в первую скобку захватить все что не является комментарием т.е. обычный текст и строки в кавычках.
( (?:не комментарий)* ) коментарий
А в замене с помощью $1 подставляем текст, который был захвачен первой скобкой и таким образом очищаем текст от комментариев.
Если в тексте не нашлось больше комментариев, то очередная попытка поиска завершится неудачей.
Механизм регулярных выражений повторяет попытку поиска со следующей позиции в строке.
Т.е. после каждой неудачи перемещается на один символ вперёд.
"//"
После неудачи и смещения вперёд будет найден и вырезан комментарий.
\G позволяет прекратить дальнейшие попытки поиска.
1
07.04.2016, 17:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2016, 17:54
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru