Экранирование кавычек в регулярном выражении или сбор комментариев в коде - C#
Формулировка задачи:
Написать программу, которая удаляет все комментарии из исходного файла.
С помощью гугла и CyberForum.ru нашел метод сбора комментариев в файле с кодом С#. Осталась проблема как не учитывать места с кавычками. Как должно выглядеть регулярное выражение?
Или хотя бы подскажите как экранировать кавычки - ". Все методы типа: \, "" не работают. Пробовал указывать в юникоде вроде \u0022, все равно не получается учесть такие ситуации как:
Console.WriteLine("/*dfsdf*////****/**//**Hello, world!");/**/ //
Все ссылки уже фиолетовые.
Для примера input.txt
Листинг программы
- using System;
- using System.IO;
- using System.Text.RegularExpressions;
- namespace HttpListenerTest
- {
- class Program
- {
- static void Main(string[] args)
- {
- string line;
- StreamReader input = new StreamReader(@"../../input.txt");
- StreamWriter output = new StreamWriter(@"../../output.txt");
- line = input.ReadToEnd();
- Regex pattern1 = new Regex(@"(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)");
- line = pattern1.Replace(line, "");
- Console.WriteLine(line);
- output.WriteLine(line);
- input.Close();
- output.Close();
- Console.ReadKey();
- }
- }
- }
Решение задачи: «Экранирование кавычек в регулярном выражении или сбор комментариев в коде»
textual
Листинг программы
- using System;
- using System.IO;
- using System.Text.RegularExpressions;
- namespace NoComments
- {
- class Program
- {
- static void Main()
- {
- string filePathIn = @"..\..\Input.txt";
- string filePathOut = @"..\..\Output.txt";
- if (File.Exists(filePathIn))
- {
- using (var streamReader = File.OpenText(filePathIn))
- using (TextWriter textWriter = new StreamWriter(File.Create(filePathOut)))
- {
- string input = streamReader.ReadToEnd();
- var blockComments = @"(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)";
- var lineComments = @"//(.*?)\r?\n";
- var strings = @"""((\\[^;\n]|[^"";\n])*)""";
- var verbatimStrings = @"@(""[^""]*"")+";
- Regex pattern = new Regex(blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings, RegexOptions.Compiled);
- input = pattern.Replace(input, m =>
- {
- if (m.Value.StartsWith("/*")) return "";
- if (m.Value.StartsWith("//")) return "\r\n";
- return m.Value;
- });
- textWriter.WriteLine(input);
- }
- }
- else
- {
- Console.WriteLine("File at path {0} is missing", filePathIn);
- Console.Read();
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д