112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
|
|
1 | |
Подбор алгоритма обработки строки регулярным выражением06.04.2016, 14:11. Показов 1461. Ответов 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 | 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 | |
07.04.2016, 17:54 | |
Помогаю со студенческими работами здесь
9
Спарсить ссылку регулярным выражением Символы совпадают с регулярным выражением, но не выводятся Подсчет строк совпадающих с регулярным выражением Подскажите по парсеру html и регулярным выражением Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |