Экранирование кавычек в регулярном выражении или сбор комментариев в коде - 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(); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д