Экранирование кавычек в регулярном выражении или сбор комментариев в коде - C#

Узнай цену своей работы

Формулировка задачи:

Написать программу, которая удаляет все комментарии из исходного файла. С помощью гугла и CyberForum.ru нашел метод сбора комментариев в файле с кодом С#. Осталась проблема как не учитывать места с кавычками. Как должно выглядеть регулярное выражение? Или хотя бы подскажите как экранировать кавычки - ". Все методы типа: \, "" не работают. Пробовал указывать в юникоде вроде \u0022, все равно не получается учесть такие ситуации как: Console.WriteLine("/*dfsdf*////****/**//**Hello, world!");/**/ //
Листинг программы
  1. using System;
  2. using System.IO;
  3. using System.Text.RegularExpressions;
  4. namespace HttpListenerTest
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. string line;
  11. StreamReader input = new StreamReader(@"../../input.txt");
  12. StreamWriter output = new StreamWriter(@"../../output.txt");
  13. line = input.ReadToEnd();
  14. Regex pattern1 = new Regex(@"(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)");
  15. line = pattern1.Replace(line, "");
  16. Console.WriteLine(line);
  17. output.WriteLine(line);
  18. input.Close();
  19. output.Close();
  20. Console.ReadKey();
  21.  
  22. }
  23. }
  24. }
Все ссылки уже фиолетовые. Для примера input.txt

Решение задачи: «Экранирование кавычек в регулярном выражении или сбор комментариев в коде»

textual
Листинг программы
  1. using System;
  2. using System.IO;
  3. using System.Text.RegularExpressions;
  4.  
  5. namespace NoComments
  6. {
  7.     class Program
  8.     {
  9.         static void Main()
  10.         {
  11.             string filePathIn = @"..\..\Input.txt";
  12.             string filePathOut = @"..\..\Output.txt";
  13.  
  14.             if (File.Exists(filePathIn))
  15.             {
  16.                 using (var streamReader = File.OpenText(filePathIn))
  17.                 using (TextWriter textWriter = new StreamWriter(File.Create(filePathOut)))
  18.                 {
  19.                     string input = streamReader.ReadToEnd();
  20.                    
  21.                     var blockComments = @"(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)";
  22.                     var lineComments = @"//(.*?)\r?\n";
  23.                     var strings = @"""((\\[^;\n]|[^"";\n])*)""";
  24.                     var verbatimStrings = @"@(""[^""]*"")+";
  25.                                        
  26.                     Regex pattern = new Regex(blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings, RegexOptions.Compiled);
  27.  
  28.                     input = pattern.Replace(input, m =>
  29.                         {
  30.                             if (m.Value.StartsWith("/*")) return "";
  31.                             if (m.Value.StartsWith("//")) return "\r\n";
  32.                             return m.Value;
  33.                         });
  34.                    
  35.                     textWriter.WriteLine(input);
  36.                 }
  37.             }
  38.             else
  39.             {
  40.                 Console.WriteLine("File at path {0} is missing", filePathIn);
  41.                 Console.Read();
  42.             }
  43.         }
  44.     }
  45. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы