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

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

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

Написать программу, которая удаляет все комментарии из исходного файла. С помощью гугла и CyberForum.ru нашел метод сбора комментариев в файле с кодом С#. Осталась проблема как не учитывать места с кавычками. Как должно выглядеть регулярное выражение? Или хотя бы подскажите как экранировать кавычки - ". Все методы типа: \, "" не работают. Пробовал указывать в юникоде вроде \u0022, все равно не получается учесть такие ситуации как: Console.WriteLine("/*dfsdf*////****/**//**Hello, world!");/**/ //
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();

        }
    }
}
Все ссылки уже фиолетовые. Для примера input.txt

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

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();
            }
        }
    }
}

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


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

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

14   голосов , оценка 3.857 из 5
Похожие ответы